Java Reference
In-Depth Information
public int intParam();
public AnnotationParameter annoParam();
@AnnotationParameter(false)
public class NestedAnnotations
{
@AnnotationExample(stringParam="hello",
intParam=19,
annoParam=@AnnotationParameter(true))
public void m()
{
}
}
Wie in diesem Beispiel zu sehen ist, hat die Annotation @AnnotationExample die Methode
annoParam, deren Rückgabetyp die Annotation @AnnotationParameter ist, wobei bei der
Deklaration das @-Zeichen weggelassen werden muss. Bitte beachten Sie, dass die Annota-
tion @AnnotationParameter so deklariert ist, dass sie nur vor Klassen, Schnittstellen und
Enumerations vorkommen darf (ElementType.TYPE). Dies gilt aber nur für die Annotation
selbst. Die Einschränkung hat keine Bedeutung, wenn die Annotation @AnnotationParame-
ter als Attributwert einer anderen Annotation vorkommt. Im Beispiel wird @Annotation-
Parameter innerhalb von @AnnotationExample vor einer Methode verwendet. Ob dies mög-
lich ist, hängt nur vom @Target der Annotation @AnnotationExample ab. Da diese nicht mit
einer @Target-Annotation gekennzeichnet ist, ist ihr Vorkommen nicht eingeschränkt. Des-
halb ist der obige Programmcode fehlerfrei.
3 . 4 Refl ection für Annotationen
Sie haben bisher gesehen, wie man Annotationen defi niert und in seinem Programm ver-
wenden kann. Dabei ist hoff entlich deutlich geworden, dass für diese Annotationen kein
ausführbarer Programmcode erzeugt werden kann („Annotationen tun nichts“). Die Anno-
tationen bekommen erst dadurch Bedeutung, dass andere Programme die annotierten Pro-
gramme betrachten und aufgrund der vorhandenen Annotationen irgendwelche Aktionen
durchführen. Die Annotationen kann man im Quellcode, in der Class-Datei oder während
der Laufzeit über Refl ection auswerten. Wir beschränken uns in diesem Buch auf die zuletzt
genannte Möglichkeit.
Die im Refl ection-Kapitel vorgestellten Klassen Class, Field, Constructor und Method besit-
zen die Methoden getAnnotations und getDeclaredAnnotations zum Auslesen von Annota-
tionen (Rückgabetyp für beide Methoden ist Annotation[]). Damit können die Annotationen
einer Klasse bzw. einer Schnittstelle, eines Attributs, eines Konstruktors oder einer Methode
abgefragt werden. Ähnlich wie bei GenericDeclaration werden die Methoden getAnnota-
tions und getDeclaredAnnotations (und zwei andere, die später noch besprochen werden) in
eine Schnittstelle gepackt, die AnnotatedElement heißt und von den genannten Klassen
implementiert wird. Der Unterschied zwischen den beiden Varianten mit und ohne Declared
ist wie bei den bisher besprochenen Refl ection-Methoden, z. B. getMethods und getDeclared-
 
Search WWH ::




Custom Search