Die Meta-Annotation @java.lang.annotation.Target beschreibt, wo eine Annotation angeheftet werden kann. Ist kein ausdrückliches @Target gewählt, gilt es für alle Elemente, die Annotation kann also etwa an Klassen stehen, aber auch an lokalen Variablen. In der Regel gibt es bei @Target ein Element, und das ist von der Aufzählung java.lang.annotation.ElementType; es deklariert die folgenden Ziele:
|
ElementType |
Erlaubt Annotationen … |
|
ANNOTATION_TYPE |
nur an anderen Annotationstypen, was @Target(ANNOTATION_TYPE) somit zu einer Meta-Annotation macht. |
|
TYPE |
an allen Typdeklarationen, also Klassen, Schnittstellen, Annotationstypen, Aufzählungen. |
|
CONSTRUCTOR |
an Konstruktor-Deklarationen |
|
METHOD |
an Deklarationen von statischen und nicht-statischen Methoden. |
|
FIELD |
an Deklarationen von statischen Variablen und Objekt-Variablen. |
|
PARAMETER |
an Parametervariablen von Methoden. |
|
LOCAL_VARIABLE |
an lokalen Variablen. |
|
PACKAGE |
an package-Deklarationen. |
|
TYPE_PARAMETER |
an der Deklaration einer Typ-Variablen für generische Typ-Parameter. Neu in Java 8. Wenn es etwa heißt class List<@AnAnnotation T>. |
|
TYPE_USE |
an allen Stellen, wo Typen eingesetzt werden, adressiert also Typ-Annotationen. Ebenfalls neu in Java 8. So etwas wie @NonNull (keine Annotation aus der Java SE!) ist ein Beispiel |
Tabelle 1.3: ElementType bestimmt Orte, an denen Annotationen erlaubt sind.