Als Annotation wird im Zusammenhang mit der Programmiersprache Java ein Sprachelement bezeichnet, das die Einbindung von Metadaten in den Quelltext erlaubt. Dieses Element wurde im JSR 175 festgelegt und mit der Version Java 5.0 eingeführt.
Annotationen werden durch ein @-Zeichen gefolgt vom Namen der Annotation gekennzeichnet. Optional kann eine kommagetrennte Parameterliste folgen, die in runden Klammern eingefasst wird. Beispielsweise markiert die Annotation im folgenden Quelltextausschnitt die Klasse A als überholt (deprecated):
@Deprecated
public class A {}
In Java 5.0 stehen sieben solcher Annotationstypen zur Verfügung. Bei der Programmierung können jedoch zusätzliche Annotationstypen erzeugt werden.
Annotationen haben keine direkte Auswirkung auf die Compilierung (Übersetzung) des Quelltextes. Gegenüber einfachen Kommentaren kann jedoch zur Laufzeit auf sie zugegriffen werden. Des Weiteren können Annotationen im Quelltext mittels des Annotation Processing Toolkits (APT) ausgewertet werden.
Eingesetzt werden Annotationen unter anderem im Java-EE-Umfeld, um zusätzliche Beschreibungsdateien zu Klassen automatisch zu erzeugen.
Eine Vorgängertechnik zur Einbettung von Metadaten in Java-Quelltexten ist die Verwendung spezieller Javadoc-Kommentare. Diese wurden mit Hilfe sogenannter Doclets ausgewertet. Ein vielfach eingesetztes Werkzeug für diese Methode ist XDoclet. Diese Technik kann auch nach Einführung der Annotationen weiterhin verwendet werden.
Die Java SE 5.0 stellt die folgenden sieben Annotationstypen zur Verfügung, die in den Paketen (Package) java.lang oder java.lang.annotation liegen.
| Annotation | Beschreibung |
|---|---|
Im Paket java.lang |
|
| @Deprecated | Hiermit können Klassen, Attribute oder Methoden gekennzeichnet werden, die nicht mehr verwendet werden sollen. Der Compiler gibt dann eine Warnung aus, wenn ein so gekennzeichnetes Element verwendet wird.
Es empfiehlt sich zusätzlich, einen Javadoc-Kommentar anzubringen, der aufzeigt, wie das entsprechende Element ersetzt werden soll. Das folgende Beispiel zeigt dies:
/**
* @deprecated Die Klasse A wurde mit Version 10.3 durch die Klasse ANeu ersetzt.
*/
@Deprecated
public class A {}
|
| @Override | Mit diesem Typ kann eine Methode gekennzeichnet werden, die die Methode ihrer Oberklasse überschreibt. Der Compiler stellt dann sicher, dass die Oberklasse diese Methode enthält und gibt einen Fehler aus, wenn dies nicht der Fall ist.
Beispiel:
public class A {
public void eineMethode() {}
}
public class B extends A {
@Override
public void eineMethode() {}
}
|
| @SuppressWarnings | Bei der Verwendung dieses Annotationstyps unterdrückt der Compiler bestimmte Warnungen. Der Annotation wird dazu ein Array mit Strings übergeben, die die zu unterdrückenden Warnungen enthalten.
Im folgenden Beispiel wird der Compiler angewiesen, die deprecated-Warnung für die Klasse EineDeprecatedKlasse zu unterdrücken:
public class A {
@SuppressWarnings({"deprecation"})
public void eineMethode() {
EineDeprecatedKlasse b = new EineDeprecatedKlasse();
}
}
|
Im Paket java.lang.annotation |
|
| @Documented | Dieser Annotationstyp wird als Meta-Annotation verwendet: Eine Annotation dieses Typs legt für einen neu erstellten Annotationstyp fest, dass er von Javadoc bei der Erzeugung der Dokumentation berücksichtigt wird. |
| @Inherited | Dieser Annotationstyp wird bei der Programmierung einer Annotation angewandt. Damit kann festgelegt werden, dass diese zusammen mit einer Klasse vererbt wird. Wird diese Annotation dann beispielsweise bei einer bestimmten Klasse angewendet, so gilt diese auch für alle Klassen, die von dieser erben. |
| @Retention | Dieser Typ wird bei der Programmierung einer Annotation angewandt. Sie gibt an, wann auf sie selbst zugegriffen werden kann. Es gibt drei mögliche Werte für eine Annotation dieses Typs, die in der Enumeration java.lang.annotation.RetentionPolicy aufgeführt sind:
|
| @Target | Dieser Annotationstyp wird bei der Programmierung einer Annotation angewandt. Damit wird festgelegt, auf welche Elemente eines Programms sie angewendet werden darf. Die möglichen Werte für eine Annotation dieses Typs, sind in der Enumeration java.lang.annotation.ElementType aufgeführt. |