#вопросы_с_собеседований

Есть ли способ ограничить элементы, к которым можно применить аннотацию?



Да
, для этой цели можно использовать аннотацию @Target. Если мы попытаемся использовать аннотацию в контексте, где она неприменима, компилятор выдаст ошибку.

Вот пример ограничения использования аннотации @SimpleAnnotation только объявлениями полей:



@Target(ElementType.FIELD)

public @interface SimpleAnnotation {

// ...

}



Мы можем передать несколько констант, если хотим сделать их применимыми в большем количестве контекстов:



@Target({ ElementType.FIELD, ElementType.METHOD, ElementType.PACKAGE })



Мы даже можем сделать аннотацию, чтобы ее нельзя было использовать для аннотирования чего-либо. Это может пригодиться, когда объявленные типы предназначены исключительно для использования в качестве типа-члена в сложных аннотациях:



@Target({})

public @interface NoTargetAnnotation {

// ...

}




@javatg