java.lang.annotation.ElementType
:
Тип элемента программы. Константы этого перечислимого типа обеспечивают простую классификацию объявленных элементов в программе Java. Эти константы используются с типом метааннотации Target
, чтобы указать, где разрешено использование типа аннотации.
Существуют следующие константы:
Может ли кто-нибудь объяснить, что представляет собой каждый из них (где они будут аннотированы в реальном коде)?
Здесь приведены основные из них:
@CustomTypeAnnotation
public class MyAnnotatedClass {
@CustomFieldAnnotation
private String foo;
@CustomConstructorAnnotation
public MyAnnotatedClass() {
}
@CustomMethodAnnotation
public String bar(@CustomParameterAnnotation String str) {
@CustomLocalVariableAnnotation String asdf = "asdf";
return asdf + str;
}
}
ANNOTATION_TYPE - это аннотация на другую аннотацию, например, так:
@CustomAnnotationTypeAnnotation
public @interface SomeAnnotation {
..
}
Пакет определяется в package-info.java
файле в пакете, например:
@CustomPackageLevelAnnotation
package com.some.package;
import com.some.package.annotation.PackageLevelAnnotation;
Допустим, аннотация, которой вы задаете ElementType
, называется YourAnnotation
:
ANNOTATION_TYPE - объявление типа аннотации. Примечание: Это относится к другим аннотациям
@YourAnnotation
public @interface AnotherAnnotation {...}
CONSTRUCTOR - объявление конструктора
public class SomeClass {
@ВашаАннотация
public SomeClass() {...}
}
FIELD - объявление поля (включает константы перечисления)
@YourAnnotation
private String someField;
LOCAL_VARIABLE - Объявление локальной переменной. Примечание: Это не может быть прочитано во время выполнения, поэтому используется только для компиляции, например, для аннотации @SuppressWarnings
.
public void someMethod() {
@YourAnnotation int a = 0;
}
METHOD - объявление метода
@YourAnnotation
public void someMethod() { ...}
PACKAGE - Объявление пакета. Примечание: Это можно использовать только в package-info.java
.
@YourAnnotation
пакет org.yourcompany.somepackage;
PARAMETER - Объявление параметра
public void someMethod(@YourAnnotation param) {...}
TYPE - Объявление класса, интерфейса (включая тип аннотации) или перечисления
@YourAnnotation
public class SomeClass {...}
Вы можете указать несколько ElementType
ов для данной аннотации. Например:
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
ТИП :
Аннотация:
@Target({ElementType.TYPE}) // This annotation can only be applied to
public @interface Tweezable { // class, interface, or enum declarations.
}
и пример использования:
@Tweezable
public class Hair {
...
}