Ответ 1
Невозможно аннотировать параметры типа в Java - язык этого не поддерживает. Единственное, что вы можете сделать с параметрами типа - сделать их bounded.
Недавно я начал использовать библиотеку поддержки 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) {
...
}
Однако это кажется невозможным таким образом. Поскольку компилятор говорит:
"Аннотации типа не поддерживаются на этом уровне языка"
Любые предложения?
Невозможно аннотировать параметры типа в Java - язык этого не поддерживает. Единственное, что вы можете сделать с параметрами типа - сделать их bounded.
Если вы попытаетесь сделать что-то вроде private List<@Media String> mList
с JavaVersion.VERSION_1_7
, вы получите
Аннотации типа не поддерживаются на этом уровне языка
Хотя вы можете сделать что-то вроде private @Media String[] mArray
.
С JavaVersion.VERSION_1_8
private @Media List<String> mList
будет работать.
Я буду честен, не побежал, чтобы проверить его, но не была указана ошибка Lint.