Looking for java Keywords? Try Ask4Keywords

Java Language Определение типов аннотаций


пример

Типы аннотаций определяются с помощью @interface . Параметры определяются аналогично методам регулярного интерфейса.

@interface MyAnnotation {
    String param1();
    boolean param2();
    int[] param3();  // array parameter 
}

Значения по умолчанию

@interface MyAnnotation {
    String param1() default "someValue";
    boolean param2() default true;
    int[] param3() default {};
}

Мета-аннотаций

Мета-аннотации - это аннотации, которые могут применяться к типам аннотаций. Специальная предопределенная мета-аннотация определяет, как можно использовать типы аннотаций.

@Target

Мета-аннотация @Target ограничивает типы, к которым может применяться аннотация.

@Target(ElementType.METHOD)
@interface MyAnnotation {
    // this annotation can only be applied to methods
}

Несколько значений могут быть добавлены с использованием нотации массива, например @Target({ElementType.FIELD, ElementType.TYPE})

Доступные значения

ElementType цель пример использования целевого элемента
ANNOTATION_TYPE типы аннотаций
@Retention(RetentionPolicy.RUNTIME) 
@interface MyAnnotation
КОНСТРУКТОР конструкторы
@MyAnnotation
public MyClass() {}
Область поля, константы перечисления
@XmlAttribute
private int count;
LOCAL_VARIABLE объявления переменных внутри методов
for (@LoopVariable int i = 0; i < 100; i++) {
@Unused
String resultVariable;
}
ПАКЕТ пакет (в package-info.java )
@Deprecated
package very.old;
МЕТОД методы
@XmlElement
public int getCount() {...}
ПАРАМЕТР параметры метода / конструктора
public Rectangle(
@NamedArg("width") double width,
@NamedArg("height") double height) {
...
}
ТИП классы, интерфейсы, перечисления
@XmlRootElement
public class Report {}
Java SE 8
ElementType цель пример использования целевого элемента
TYPE_PARAMETER Объявление параметров типа
public <@MyAnnotation T> void f(T t) {}
TYPE_USE Использование типа
Object o = "42";
String s = (@MyAnnotation String) o;

@Retention

Мета-аннотация @Retention определяет видимость аннотации во время процесса или выполнения компиляции приложений. По умолчанию аннотации включены в .class файлы, но не отображаются во время выполнения. Чтобы сделать аннотацию доступной во время выполнения, в этой аннотации необходимо установить RetentionPolicy.RUNTIME .

@Retention(RetentionPolicy.RUNTIME)
@interface MyAnnotation {
    // this annotation can be accessed with reflections at runtime
}

Доступные значения

Политика удержания эффект
УЧЕБНЫЙ КЛАСС Аннотации доступны в файле .class , но не во время выполнения
RUNTIME Аннотации доступны во время выполнения и могут быть доступны посредством отражения
ИСТОЧНИК Аннотации доступны во время компиляции, но не добавляются в .class . Аннотацию можно использовать, например, обработчиком аннотации.

@Documented

Мета-аннотация @Documented используется для обозначения аннотаций, использование которых должно быть документировано генераторами документации API, такими как javadoc . Он не имеет значений. С помощью @Documented все классы, использующие аннотацию, будут перечислены на их сгенерированной странице документации. Без @Documented невозможно увидеть, какие классы используют аннотацию в документации.

@Inherited

@Inherited метаинформация @Inherited имеет отношение к аннотациям, которые применяются к классам. Он не имеет значений. Пометка аннотации как @Inherited изменяет способ обработки аннотаций.

  • Для не унаследованной аннотации запрос рассматривает только исследуемый класс.
  • Для унаследованной аннотации запрос также проверяет цепочку суперкласса (рекурсивно) до тех пор, пока не будет найден экземпляр аннотации.

Обратите внимание, что запрашиваются только суперклассы: любые аннотации, привязанные к интерфейсам в иерархии классов, будут игнорироваться.

@Repeatable

@Repeatable мета-аннотация @Repeatable в Java 8. Она указывает, что к @Repeatable аннотации можно добавить несколько экземпляров аннотации. Эта мета-аннотация не имеет значений.