2010-08-23 6 views
33

java.lang.annotation.ElementType:Was bedeuten Java-Annotation-ElementType-Konstanten?

Ein Programmelementtyp. Die Konstanten dieses Aufzählungstyps bieten eine einfache Klassifizierung der deklarierten Elemente in einem Java-Programm. Diese Konstanten werden zusammen mit dem Meta-Annotationstyp Target verwendet, um festzulegen, wo ein Annotationstyp zulässig ist.

Es gibt die folgenden Konstanten:

  • ANNOTATION_TYPE - Annotation Typdeklaration
  • CONSTRUCTOR - Constructor Erklärung
  • FIELD - Felddeklaration (enthält Enum-Konstanten)
  • LOCAL_VARIABLE - Lokale varia ble Erklärung
  • METHOD - Methodendeklaration
  • PACKAGE - Package Erklärung
  • PARAMETER - Parameter Deklaration
  • TYPE - Klassen, Schnittstellen (einschließlich Annotationstyp) oder ENUM Erklärung

Kann jemand erklären, was jeder von ihnen ist (wo sie kommentiert werden würden) im tatsächlichen Code)?

+0

Sind die Beschreibungen nicht klar genug? Sicher verstehst du wenigstens einige von ihnen? – meriton

+0

'@meriton:' Ich habe nur Anmerkungen zu Feldern, Methoden und Klassen gesehen, die wahrscheinlich __FIELD__, __METHOD__ und __TYPE__ entsprechen. Ich werde Beispiele für Anmerkungen zu jedem dieser Artikel veröffentlichen, und vielleicht wird jemand den Rest ausfüllen? –

+0

Java 8 fügt zwei neue Konstanten TYPE_PARAMETER und TYPE_USE hinzu. – mernst

Antwort

33

Dies die wichtigsten sind fasst zusammen:

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

Dann ANNOTATION_TYPE ist nur auf eine Annotation-Definition, und das Paket wird in einer package-info.java-Datei im Paket, see here definiert.

+4

Antwort wäre so viel besser, wenn Sie auch Snippets für ANNOTATION_TYPE und für Paket enthalten. –

81

sagen Lassen Sie die Anmerkung, auf die Sie angeben, wird die ElementTypeYourAnnotation genannt:

  • ANNOTATION_TYPE

    - Annotation Typdeklaration. Hinweis: Diese auf andere Anmerkungen geht

    @YourAnnotation 
    public @interface AnotherAnnotation {..} 
    
  • CONSTRUCTOR - Constructor Erklärung

    public class SomeClass { 
        @YourAnnotation 
        public SomeClass() {..} 
    } 
    
  • FIELD - Felddeklaration (enthält Enum-Konstanten)

    @YourAnnotation 
    private String someField; 
    
  • LOCAL_VARIABLE - lokale Variable Erklärung. Hinweis: Dies kann nicht zur Laufzeit gelesen werden, daher wird es nur für Kompilierungszeit verwendet, wie die @SuppressWarnings Annotation.

    public void someMethod() { 
        @YourAnnotation int a = 0; 
    } 
    
  • METHOD - Methodendeklaration

    @YourAnnotation 
    public void someMethod() {..} 
    
  • PACKAGE - Package Erklärung. Hinweis: Dies kann nur in package-info.java verwendet werden.

    @YourAnnotation 
    package org.yourcompany.somepackage; 
    
  • Parameter - Parameter Deklaration

    public void someMethod(@YourAnnotation param) {..} 
    
  • TYPE - Klasse, Schnittstelle (einschließlich Annotationstyp) oder Aufzählungs Erklärung

    @YourAnnotation 
    public class SomeClass {..} 
    

können Sie mehrere ElementType s angeben für eine bestimmte Anmerkung. Z.B .:

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

'@Bozho:' Danke für den Profi-Tipp. Ich habe das Ding unter dem Stimmzähler markiert. –

+1

+1 für mehrere Ziele –

2

TYPE:

Annotation:

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

und ein Beispiel für die Verwendung:

@Tweezable 
public class Hair { 
    ... 
}