Definition von Annotationen
How To ...
Wie werden Annotationen definiert?
Hintergründe
Annotationen sind Interfaces mit einer in Java 5.0 eingeführten Syntaxerweiterung.
So geht's
Annotationen sind syntaktisch „fast” Interfaces. Vor das Schlüsselwort interface wird das @-Symbol gesetzt. Mit der Annotation @Target wird festgelegt, für welche Art von Programmelement die Anwendung der Annotation erlaubt ist. Mit der Annotation @Retention wird der Gültigkeitsbereich der Annotation festgelegt.
Mögliche Werte für @Target sind die Elemente der Enumeration java.lang.annotation.ElementType:
| Wert | Bedeutung |
|---|---|
| ANNOTATION_TYPE | Zur Verwendung bei Annotationen |
| CONSTRUCTOR | Zur Verwendung bei Konstruktoren |
| FIELD | Zur Verwendung bei Instanzvariablen und Enum-Konstanten |
| LOCAL_VARIABLE | Zur Verwendung bei lokalen Variablen |
| METHOD | Zur Verwendung bei Methoden |
| PACKAGE | Zur Verwendung bei Packages |
| PARAMETER | Zur Verwendung bei Parametern |
| TYPE | Zur Verwendung bei Klassen, Interfaces und Enums |
Mögliche Werte für @Retention sind die Elemente der Enumeration java.lang.annotation.RetentionPolicy:
| Wert | Bedeutung |
|---|---|
| CLASS | Annotation ist im Byte-Code enthalten muss aber durch die JVM nicht verfügbar sein |
| RUNTIME | Annotation ist im Byte-Code enthalten und durch die JVM (Reflection) verfügbar |
| SOURCE | Annotation wird durch den Compiler gelöscht. |
Als Beispiel geben wird die Definition der @Entity-Annotation der JPA/EJB-Spezifikation wieder:
package javax.persistence;
import java.lang.annotation.Target;
import java.lang.annotation.Retention;
import static java.lang.annotation.ElementType.TYPE;
import static java.lang.annotation.RetentionPolicy.RUNTIME;
@Target(TYPE)
@Retention(RUNTIME)
public @interface Entity {
String name() default "";
}
Die Verwendung der Annotation ist bei Klassen, Interfaces und Enums erlaubt. Die Annotation ist zur Laufzeit als Meta-Information verfügbar.
