Что означают константы Java-аннотации ElementType? - PullRequest
50 голосов
/ 23 августа 2010

java.lang.annotation.ElementType:

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

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

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

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

Ответы [ 3 ]

92 голосов
/ 23 августа 2010

Допустим, аннотация, для которой вы указываете 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;
    
  • PARAMETER - Объявление параметров

    public void someMethod(@YourAnnotation param) {..}
    
  • TYPE - Класс, интерфейс (включая тип аннотации) или объявление enum

    @YourAnnotation
    public class SomeClass {..}
    

Вы можете указать несколько ElementType с для данной аннотации. E.g.:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD})
46 голосов
/ 23 августа 2010

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

@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 см. здесь и здесь .

3 голосов
/ 23 августа 2010

TYPE :

Аннотация:

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

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

@Tweezable
public class Hair {
    ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...