Annotation (Java)

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.

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:
CLASS
Die Annotation wird mit der Klasse kompiliert und ist damit in der .class-Datei vorhanden. Allerdings kann sie nicht während der Laufzeit einer Anwendung ausgelesen werden.
RUNTIME
Die Annotation kann während der Laufzeit einer Anwendung mittels des Reflection-Mechanismus ausgelesen werden.
SOURCE
Die Annotation wird vor dem Kompilieren aus dem Quelltext entfernt. Entsprechend steht sie zur Laufzeit eines Programms nicht zur Verfügung.
@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.

Weblinks

Quelle:
Artikel Annotation (Java) aus der freien Enzyklopädie Wikipedia mit dieser Versionsgeschichte
Lizenz:
Kategorien:
Empfehlungen
Moreau, Luc / Foster, Ian
47,95 €

Solymosi, Andreas; Schmiedecke, Ilse
29,90 €

Doberkat, Ernst-Erich; Dißmann, Stefan
34,80 €

Hansmann, Uwe / Nicklous, Martin S. / Schäck, Thomas / Schneider, Achim / Seliger, Frank
68,43 €

Echtle, Klaus; Goedicke, Michael
30,17 €

Mössenböck, Hanspeter
29,00 €

Alves-Foss, Jim (ed.)
61,95 €

Erlenkötter, Helmut
9,90 €
Bookmarks
delicious wong linkarena google
Sponsoren