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.