Что означают константы ElementType в аннотациях Java?
java.lang.annotation.ElementType
:
Тип элемента программы. Константы этого перечисляемого типа обеспечивают простую классификацию объявленных элементов в программе Java. Эти константы используются с мета-аннотацией Target
, чтобы указать, где законно использовать тип аннотации.
Существуют следующие константы:
- ANNOTATION_TYPE - объявление типа аннотации
- КОНСТРУКТОР - объявление конструктора
- FIELD - объявление поля (включает константы перечисления)
- LOCAL_VARIABLE - объявление локальной переменной
- МЕТОД - Объявление метода
- ПАКЕТ - объявление пакета
- ПАРАМЕТР - Объявление параметра
- ТИП - класс, интерфейс (включая тип аннотации) или объявление перечисления
Может кто-нибудь объяснить, что у каждого из них (где они будут аннотированы в реальном коде)?
Ответы
Ответ 1
Это обобщает основные из них:
@BlahType
public class MyAnnotatedClass {
@BlahField
private String foo;
@BlahConstructor
public MyAnnotatedClass() {
}
@BlahMethod
public String bar(@BlahParameter String str) {
@BlahLocalVariable String asdf = "asdf";
return asdf + str;
}
}
Затем ANNOTATION_TYPE находится только в определении аннотации, а пакет указан в файле package-info.java в пакете, см. здесь.
Ответ 2
Скажем, аннотация, на которую вы указываете ElementType
, называется YourAnnotation
:
-
ANNOTATION_TYPE - объявление типа аннотации. Примечание: Это относится к другим аннотациям
@YourAnnotation
public @interface AnotherAnnotation {..}
-
CONSTRUCTOR - объявление конструктора
public class SomeClass {
@YourAnnotation
public SomeClass() {..}
}
-
FIELD - объявление поля (включает константы перечисления)
@YourAnnotation
private String someField;
-
LOCAL_VARIABLE - объявление локальной переменной. Примечание.. Это невозможно прочитать во время выполнения, поэтому оно используется только для вещей времени компиляции, таких как аннотация @SuppressWarnings
.
public void someMethod() {
@YourAnnotation int a = 0;
}
-
МЕТОД - Объявление метода
@YourAnnotation
public void someMethod() {..}
-
ПАКЕТ - объявление пакета. Примечание: Это можно использовать только в package-info.java
.
@YourAnnotation
package org.yourcompany.somepackage;
-
ПАРАМЕТР - Объявление параметра
public void someMethod(@YourAnnotation param) {..}
-
TYPE - класс, интерфейс (включая тип аннотации) или объявление перечисления
@YourAnnotation
public class SomeClass {..}
Вы можете указать несколько ElementType
для данной аннотации. Например:.
@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
Ответ 3
TYPE
Аннотация:
@Target({ElementType.TYPE}) // This annotation can only be applied to
public @interface Tweezable { // class, interface, or enum declarations.
}
и пример использования:
@Tweezable
public class Hair {
...
}