@Target
определяет, в каком контексте может применяться объявляемая аннотация. Допустимые контексты перечисляются значениями ElementType
. По умолчанию, если @Target
не указан, разрешены все контексты кроме TYPE_PARAMETER
. Возможные таргеты:• TYPE – Объявление класса, интерфейса, аннотации или enum-а.
• FIELD – Объявление поля (включая константы enum-ов).
• METHOD – Объявление метода.
• PARAMETER – Формальный параметр в объявлении метода.
• CONSTRUCTOR – Объявление конструктора.
• LOCAL_VARIABLE – Объявление локальной переменной.
• ANNOTATION_TYPE – Объявление аннотации. Применяется для создания мета-аннотации.
• PACKAGE – Объявление пакета (в
package-info.java
).–– С Java 8 ––
• TYPE_PARAMETER – Обявление generic типа-параметра.
• TYPE_USE – Любое использование типа. Например приведение:
(@NonNull String) myObject
.–– С Java 9 ––
• MODULE – Объявление модуля.