2.2. Definition von Annotationstypen
Die Deklaration eines Annotationstyps ist ähnlich der einer Interface-Deklaration.
Zur Kennzeichnung einer Annotationstyp-Deklaration wird dem Schlüsselwort
interface
ein "@"-Zeichen vorangestellt. Als Beispiel soll der
Annotationstyp Autor
definiert werden, dabei werden die vordefinierten
Meta-Annotationen @Documented
, @Retention
und
@Target
verwendet (siehe auch Abschnitt 2.4).
Für die Definition wird eine Java-Quelltextdatei wie folgt erstellt:
Listing 2.1. Autor.java
. Definition des Annotationstyps Autor
.
import java.lang.annotation.*;
@Documented
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Autor {
int id();
String name();
String vorname();
}
Die Elemente des Annotationstyps Autor
sind id
,
name
und vorname
. Ein Annotationstyp-Element kann mit
Hilfe des Schlüsselwortes default
mit einem Vorgabewert versehen
werden. Die folgenden Zeilen würden für alle drei Elemente einen Vorgabewert
festlegen:
int id() default 1;
String name() default "im Glueck";
String vorname() default "Hans";
Falls der Annotationtyp Autor
mit den drei Default-Werten
definiert wäre, wären die Annotationensangaben @Autor
oder
@Autor(id = 2, name = "Dampf")
innerhalb eines Quellprogramms
zulässig. Die in der Annotation nicht aufgeführten Element-Wert-Paare werden
ergänzt und dabei wird der jeweilige Vorgabewert verwendet. An dieser Stelle
soll noch kurz die zu Autor.java
gehörende API-Dokumentation betrachtet
werden. Sie kann mit der folgender Anweisung generiert werden:
> javadoc Autor.java
Ein Ausschnitt aus den erzeugten HTML-Dateien zeigt, dass die bei der Deklaration verwendeten Meta-Annotationen und die
Elemente des Annotationstyps aufgeführt sind.
Zunächst soll noch der weitere Annotationtyp (Marker-Annotationstyp)
TestElement
definiert werden, der später in einem Beispiellisting
verwendet werden soll, um Methoden zu kennzeichnen.
Listing 2.2. TestElement.java
. Definition des Annotationstyps
TestElement
.
import java.lang.annotation.*;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface TestElement { }