Annotation (Java)

aus Wikipedia, der freien Enzyklopädie

Wechseln zu: Navigation, Suche

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:
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.

[Bearbeiten] Weblinks

Persönliche Werkzeuge
Buch erstellen