Что означают константы ElementType аннотации Java?

java.lang.annotation.ElementType :

Тип элемента программы. Константы этого перечислимого типа обеспечивают простую классификацию объявленных элементов в программе Java. Эти константы используются с типом метааннотации Target , чтобы указать, где разрешено использование типа аннотации.

Существуют следующие константы:

  • ANNOTATION_TYPE - Объявление типа аннотации
  • CONSTRUCTOR - Объявление конструктора
  • FIELD - Объявление поля (включает константы перечисления)
  • LOCAL_VARIABLE - Объявление локальной переменной
  • МЕТОД - Объявление метода
  • ПАКЕТ - Объявление пакета
  • ПАРАМЕТР - Объявление параметра
  • ТИП - Класс, интерфейс (включая аннотацию type) или объявление перечисления

Может ли кто-нибудь объяснить, что представляет собой каждый из них (где они будут аннотированы в реальном коде)?

55
задан Ciro Santilli 新疆改造中心法轮功六四事件 5 March 2015 в 12:50
поделиться

3 ответа

Здесь приведены основные из них:

@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;

Подробнее об аннотациях PACKAGE смотрите здесь и здесь.

49
ответ дан 26 November 2019 в 17:43
поделиться

Допустим, аннотация, которой вы задаете 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})
94
ответ дан 26 November 2019 в 17:43
поделиться

ТИП :

Аннотация:

@Target({ElementType.TYPE})    // This annotation can only be applied to
public @interface Tweezable {  // class, interface, or enum declarations.
}

и пример использования:

@Tweezable
public class Hair {
    ...
}
3
ответ дан 26 November 2019 в 17:43
поделиться
Другие вопросы по тегам:

Похожие вопросы: