Annotationen wurden in Java 5 hinzugefügt, um Metadaten bereitzustellen, die vom Compiler und verschiedenen Frameworks verwendet werden können. Ursprünglich halfen sie Werkzeugen (z. B. JUnit oder Hibernate), besser mit dem Code zu interagieren, ohne dass wiederholender oder externer Konfigurationscode geschrieben werden musste.
Annotationen ermöglichen das Hinzufügen von Informationen zu Klassen, Methoden, Feldern, Parametern und sogar lokalen Variablen. Sie können während der Kompilierung, zur Laufzeit oder während der Verarbeitung des Quellcodes zur Validierung, Generierung zusätzlicher Dateien oder zur Änderung des Verhaltens eines Programms verwendet werden.
Um eine eigene Annotation zu deklarieren, wird das Schlüsselwort @interface verwendet.
Beispielcode:
@Retention(RetentionPolicy.RUNTIME) @Target(ElementType.METHOD) public @interface MyAnnotation { String value(); } class Example { @MyAnnotation("Test") public void annotatedMethod() {} }
Wichtige Merkmale:
Wirken Annotationen nur zur Laufzeit?
Nein, Annotationen können nur auf den Quellcode (SOURCE), Bytecode (CLASS) beschränkt sein oder zur Laufzeit (RUNTIME) verfügbar sein. Ihre Wirkung hängt von der RetentionPolicy ab.
@Retention(RetentionPolicy.SOURCE) public @interface SourceOnly {}
Können die Parameter einer Annotation jeden Typ haben?
Nein, zulässige Typen sind nur Primitive, Strings, Enumerationen, andere Annotationen und Arrays dieser Typen. Objekte können nicht verwendet werden.
Können Annotationen vererbt werden?
Streng genommen werden Annotationen nicht wie Klassen vererbt. Eine Ausnahme bildet die Annotation mit @Inherited, die nur auf abgeleitete Klassen ausgeweitet wird (ohne Methoden zu beeinflussen).
Ein Entwickler in einem großen Projekt erstellte Dutzende verschiedener Annotationen zur Automatisierung von Tests, ohne sie zu dokumentieren und den Geltungsbereich einzuschränken. Infolgedessen hatte ein neues Teammitglied Schwierigkeiten zu verstehen, welche Annotationen wo wirkten.
Vorteile:
Nachteile:
Im Team wurde eine strenge Strategie zur Erstellung eigener Annotationen eingeführt: Es wurden nur die notwendigen hinzugefügt, jede wurde detailliert beschrieben, und ihre Gültigkeitsbereiche wurden eingeschränkt.
Vorteile:
Nachteile: