Подтвердить что ты не робот

Аннотации поддержки Android - Как использовать IntDef/StringDef (Typedef Annotations) с общим списком?

Недавно я начал использовать библиотеку поддержки Android IntDef/StringDef (аннотации Typedef). Я выполнил документацию в сайте проекта Android Tools и не смог найти там или в любом другом соответствующем учебнике, как я могу использовать аннотации Intped/StringDef typedef с помощью массив генериков. например, если у меня есть следующий фрагмент кода:

public static final String MEDIA_IMAGE = "image";
public static final String MEDIA_TEXT = "text";
public static final String MEDIA_LINK = "link";
public static final String MEDIA_AUDIO = "audio";
public static final String MEDIA_VIDEO = "video";
public static final String MEDIA_VOICE = "voice";

@StringDef ({MEDIA_IMAGE, MEDIA_TEXT, MEDIA_LINK, MEDIA_AUDIO, MEDIA_VIDEO, MEDIA_VOICE})
@Retention(RetentionPolicy.SOURCE)
public @interface Media {}

Я хотел бы сделать что-то подобное этому, используя массив generics и аннотации typedef:

public List<@Media String> getMediaItems() {
    ...
}

public void setMediaItems(List<@Media String> mediaItems) {
    ...
}

Однако это кажется невозможным таким образом. Поскольку компилятор говорит:

"Аннотации типа не поддерживаются на этом уровне языка"

Любые предложения?

4b9b3361

Ответ 1

Невозможно аннотировать параметры типа в Java - язык этого не поддерживает. Единственное, что вы можете сделать с параметрами типа - сделать их bounded.

Ответ 2

Если вы попытаетесь сделать что-то вроде private List<@Media String> mList с JavaVersion.VERSION_1_7, вы получите

Аннотации типа не поддерживаются на этом уровне языка

Хотя вы можете сделать что-то вроде private @Media String[] mArray.
С JavaVersion.VERSION_1_8 private @Media List<String> mList будет работать.

Я буду честен, не побежал, чтобы проверить его, но не была указана ошибка Lint.