@Target Annotation seit Java 8
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.