Es besteht die Möglichkeit die in einem Java-Programm verwendeten Annotationen
zur Laufzeit wieder auszulesen. Dazu spielt das Interface java.lang.reflect Interface AnnotatedElement 1.5 Methode: Annotation[] getAnnotations() Annotation[] getDeclaredAnnotations() boolean isAnnotationPresent(Class<? extends Annotation> annotationClass) Das Interface wird u.a. von den Klassen Method[] m = null; try { m = Class.forName("AnnotationExample").getMethods(); } catch (ClassNotFoundException e) { System.out.println(e.toString()); } for (int i = 0; i < m.length; i++) { Annotation[] anno = m[i].getAnnotations(); if (anno.length != 0) { System.out.print(m[i].getName() + ": "); for (int j = 0; j < anno.length; j++) { System.out.print(anno[j].toString() + " "); } System.out.println(); } } Zunächst werden die Methoden der Klasse Listing 2.3. /* * AnnotationExample.java * JDK 5 * benoetigte Dateien: Autor.java, TestElement.java * */ import java.lang.annotation.*; import java.lang.reflect.*; public class AnnotationExample { @Autor(id = 1, name = "im Glueck", vorname = "Hans") public static void methodeVonHansImGlueck() { System.out.println("Hans im Glueck"); } @Autor(id = 2, name = "Dampf", vorname = "Hans") @TestElement public static void methodeVonHansDampf() { System.out.println("Hans Dampf"); } @TestElement public static void methodeTest() { System.out.println("Testmethode!"); } public static void main(String[] args) { Method[] m = null; try { m = Class.forName("AnnotationExample").getMethods(); } catch (ClassNotFoundException e) { System.out.println(e.toString()); } // alle Annotationen ausgeben for (int i = 0; i < m.length; i++) { Annotation[] anno = m[i].getAnnotations(); if (anno.length != 0) { System.out.print(m[i].getName() + ": "); for (int j = 0; j < anno.length; j++) { System.out.print(anno[j].toString() + " "); } System.out.println(); } } System.out.println(); // suchen von Methoden mit bestimmten Annotationen System.out.print("Methoden, die mit @TestElement gekennzeichnet sind: "); for (int i = 0; i < m.length; i++) { if (m[i].isAnnotationPresent(TestElement.class)) { System.out.print(m[i].getName() + " "); } } System.out.println(); } } Die Ausgabe des Listings lautet wie folgt: methodeVonHansImGlueck: @Autor(id=1, name=im Glueck, vorname=Hans) methodeVonHansDampf: @Autor(id=2, name=Dampf, vorname=Hans) @TestElement() methodeTest: @TestElement() Methoden, die mit @TestElement gekennzeichnet sind: methodeVonHansDampf methodeTest |
|