2010-08-23 23 views
33

java.lang.annotation.ElementType:Che cosa significano le costanti ElementType dell'annotazione Java?

Un tipo di elemento del programma. Le costanti di questo tipo enumerato forniscono una semplice classificazione degli elementi dichiarati in un programma Java. Queste costanti vengono utilizzate con il tipo di meta-annotazione Target per specificare dove è legale utilizzare un tipo di annotazione.

Ci sono i seguenti costanti:

  • ANNOTATION_TYPE - tipo di annotazione dichiarazione
  • CONSTRUCTOR - dichiarazione del costruttore
  • CAMPO - dichiarazione di campo (include costanti enum)
  • LOCAL_VARIABLE - Varia locale Dichiarazione ble
  • METODO - dichiarazione di metodo
  • PACCHETTO - Pacchetto dichiarazione
  • PARAMETRO - dichiarazione dei parametri
  • TIPO - Class, interfaccia (incluso il tipo di annotazione), o enum dichiarazione

Qualcuno può spiegare cosa sono ciascuno di loro (dove sarebbero stati annotati nel codice reale)?

+0

Le descrizioni non sono abbastanza chiare? Sicuramente ne capisci almeno alcuni di loro? – meriton

+0

'@meriton:' Ho visto solo annotazioni su campi, metodi e classi, che probabilmente corrispondono a __FIELD__, __METHOD__ e __TYPE__. Pubblicherò esempi di annotazioni per ognuno di questi e forse qualcuno completerà il resto? –

+0

Java 8 aggiunge due nuove costanti, TYPE_PARAMETER e TYPE_USE. – mernst

risposta

33

Questo riassume i principali:

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

Quindi ANNOTATION_TYPE è solo su una definizione di annotazione e il pacchetto è definito in un file package-info.java nel pacchetto, see here.

+4

La risposta sarebbe molto meglio se includessi anche snippet per ANNOTATION_TYPE e per PACKAGE. –

81

Diciamo che l'annotazione in cui si specifica la ElementType si chiama YourAnnotation:

  • ANNOTATION_TYPE - annotazione dichiarazione del tipo. Nota: Questo va avanti altre annotazioni

    @YourAnnotation 
    public @interface AnotherAnnotation {..} 
    
  • COSTRUTTORE - dichiarazione del costruttore

    public class SomeClass { 
        @YourAnnotation 
        public SomeClass() {..} 
    } 
    
  • CAMPO - dichiarazione di campo (include costanti enum)

    @YourAnnotation 
    private String someField; 
    
  • LOCAL_VARIABLE - variabile locale dichiarazione. Nota: Questo non può essere letto in fase di runtime, quindi viene utilizzato solo per le attività di compilazione, come l'annotazione @SuppressWarnings.

    public void someMethod() { 
        @YourAnnotation int a = 0; 
    } 
    
  • METODO - dichiarazione di metodo

    @YourAnnotation 
    public void someMethod() {..} 
    
  • PACCHETTO - Pacchetto dichiarazione. Nota: Questo può essere utilizzato solo in package-info.java.

    @YourAnnotation 
    package org.yourcompany.somepackage; 
    
  • PARAMETRI - dichiarazione dei parametri

    public void someMethod(@YourAnnotation param) {..} 
    
  • TIPO - Class, interfaccia (incluso il tipo di annotazione), o enum dichiarazione

    @YourAnnotation 
    public class SomeClass {..} 
    

è possibile specificare più ElementType s per una data annotazione. Es .:

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

'@Bozho:' Grazie per il suggerimento pro. Ho controllato la cosa sotto il contatore dei voti. –

+1

+1 per più destinazioni –

2

TIPO:

nota:

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

e un esempio di utilizzo:

@Tweezable 
public class Hair { 
    ... 
} 
Problemi correlati