Annotation (Java)
aus Wikipedia, der freien Enzyklopädie
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 beginnen mit einem @-Zeichen. Daran schließt sich ihr Name an. 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 vordefinierte Annotationstypen zur Verfügung; weitere können von Programmierern erstellt werden.
Ein Annotation Processor ist ein Compiler-Plugin, das Annotationen beim Kompilieren auswerten kann, um damit Warnungen und Fehlermeldungen zu unterdrücken oder auszulösen oder weiteren Quellcode oder andere Dateien zu generieren; den mit Annotationen versehenen Code können sie jedoch nicht ändern. Annotationen, bei denen das vorgesehen ist, können auch zur Laufzeit mittels Reflection 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.
[Bearbeiten] Vordefinierte Annotationstypen
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. |
[Bearbeiten] Weblinks
- Annotations in Suns Java-Tutorial (englisch)
- Annotation Processing Tool (apt) (englisch)
- The J2SE 5.0 Annotations Feature bei Sun (englisch)
- JSR 175: A Metadata Facility for the JavaTM Programming Language (englisch)
- Annotations in der Java Language Specification (englisch)
- Annotationen in „Java ist auch eine Insel“
- Neue Annotationen definieren in „Java ist auch eine Insel“

