2010-08-23 24 views
33

java.lang.annotation.ElementType:¿Qué significan las constantes de ElementType de anotación Java?

Un tipo de elemento de programa. Las constantes de este tipo enumerado proporcionan una clasificación simple de los elementos declarados en un programa Java. Estas constantes se usan con el tipo de metaanotación Target para especificar dónde es legal usar un tipo de anotación.

Existen las siguientes constantes:

  • ANNOTATION_TYPE - Anotación declaración de tipo
  • CONSTRUCTOR - declaración Constructor
  • CAMPO - declaración de campo (incluye constantes enum)
  • LOCAL_VARIABLE - Varia local declaración ble
  • MÉTODO - declaración de método
  • PAQUETE - Paquete declaración
  • PARÁMETRO - La declaración de parámetros
  • TIPO - Clase del interfaz (incluyendo tipo de anotación), o enum declaración

¿Puede alguien explicar lo que son cada uno de ellos (dónde se anotarían? en el código real)?

+0

¿No son las descripciones lo suficientemente claras? Seguramente entiendes al menos algunos de ellos? – meriton

+0

'@meriton:' Solo he visto anotaciones en campos, métodos y clases, lo que probablemente corresponde con __FIELD__, __METHOD__, y __TYPE__. Voy a publicar ejemplos de anotaciones para cada uno de estos, y tal vez alguien llene el resto? –

+0

Java 8 agrega dos nuevas constantes, TYPE_PARAMETER y TYPE_USE. – mernst

Respuesta

33

Esto resume los principales:

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

Luego ANNOTATION_TYPE está solo en una definición de anotación, y el paquete se define en un archivo package-info.java en el paquete, see here.

+4

La respuesta sería mucho mejor si también incluye fragmentos para ANNOTATION_TYPE y para PAQUETE. –

81

Digamos que la anotación a la que se especifica el ElementType se llama YourAnnotation:

  • ANNOTATION_TYPE - Anotación declaración de tipo. Nota: Esto va en otras anotaciones

    @YourAnnotation 
    public @interface AnotherAnnotation {..} 
    
  • CONSTRUCTOR - Declaración Constructor

    public class SomeClass { 
        @YourAnnotation 
        public SomeClass() {..} 
    } 
    
  • CAMPO - declaración de campo (incluye las constantes de enumeración)

    @YourAnnotation 
    private String someField; 
    
  • LOCAL_VARIABLE - La variable local declaración. Nota: Esto no se puede leer en tiempo de ejecución, por lo que se usa solo para cosas de tiempo de compilación, como la anotación @SuppressWarnings.

    public void someMethod() { 
        @YourAnnotation int a = 0; 
    } 
    
  • MÉTODO - declaración de método

    @YourAnnotation 
    public void someMethod() {..} 
    
  • PAQUETE - declaración del paquete. Nota: Esto se puede usar solo en package-info.java.

    @YourAnnotation 
    package org.yourcompany.somepackage; 
    
  • PARÁMETROS - La declaración de parámetros

    public void someMethod(@YourAnnotation param) {..} 
    
  • TIPO - Clase de interfaz (incluyendo el tipo de anotación), o enumeración declaración

    @YourAnnotation 
    public class SomeClass {..} 
    

se pueden especificar varios ElementType s para una anotación dada. Ej .:

@Target({ElementType.CONSTRUCTOR, ElementType.METHOD}) 
+0

'@Bozho:' Gracias por el consejo profesional. Marqué la cosa debajo del contador de votos. –

+1

+1 para objetivos múltiples –

2

TIPO:

Anotación:

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

y un ejemplo de uso:

@Tweezable 
public class Hair { 
    ... 
} 
Cuestiones relacionadas