Einfache Java-Annotationen
Es gibt nur drei einfache Anmerkungstypen, die von JDK5 bereitgestellt werden. Diese drei werden verwendet, um Fehler zu verhindern oder Erinnerungen bereitzustellen, nämlich:
1.Überschreiben
2. Veraltet
3.Warnungen unterdrücken
Es ist wichtig zu beachten, dass JDK5 (ein anderer Begriff, Tiger) nicht über viele integrierte Annotationen verfügt; stattdessen ermöglicht es dem Kern von Java, die Fähigkeit von Annotationen zu unterstützen. Dies ist in JSR-175 strikt festgelegt Definieren Sie Metadatenfunktionen. Es müssen vom Programmierer benutzerdefinierte Annotationstypen geschrieben werden. Andere JSR-Standards haben ebenfalls eine Reihe von Standardannotationstypen geschrieben. Im Folgenden werden diese drei einfachen Annotationen anhand von Beispielen ausführlich erläutert.
Anmerkung überschreiben
Die Override-Annotation gibt an, dass die annotierte Methode die Methode in der Superklasse überschreiben muss.
Wenn eine Methode diese Annotation verwendet, aber die Methode in der Oberklasse nicht überschreibt (z. B. weil die Groß- und Kleinschreibung falsch ist oder die Parameter falsch sind oder die Methode durch die Unterklasse selbst definiert wird), generiert der Compiler einen Fehler.
(Hinweis: Override-Annotationen können in JRE5 nicht verwendet werden, wenn Methoden in Schnittstellen implementiert werden. JRE6 erlaubt dies. JRE5 meldet diesen Fehler häufig.)
Beispiel 1 demonstriert das Überschreiben von Anmerkungen:
Beispiel 1 für Java-Annotationen:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse Test_Override {
@Override
öffentlicher String toString() {
return super.toString() + „Test mit ‚Override‘-Annotation“;
}
}
Was passiert, wenn der Methodenname falsch geschrieben ist? Wenn Sie beispielsweise die toString-Methode in „tostring“ (alles in Kleinbuchstaben) umbenennen, erhalten Sie beim Kompilieren eine Fehlermeldung ähnlich der folgenden:
Kopieren Sie den Codecode wie folgt:
Kompilieren einer Quelldatei in den Ordner „D:tempNew“ (2)
Testen Sie JavaApplication1buildclasses
D:tempNeuer Ordner (2)TestJavaApplication1srctest
myannotationTest_Override.java:24: Methode überschreibt nicht
eine Methode aus ihrer Oberklasse
@Override
1 Fehler
BUILD FAILED (Gesamtzeit: 0 Sekunden)
Natürlich wird Eclipse direkt ein rotes Kreuz melden. Da IDEs jetzt sehr einfach zu verwenden sind, sollten Anfänger sich nicht mit der JDK-Befehlszeile herumschlagen.
Veraltete Anmerkung
Diese Annotation gibt an, dass der Compiler eine Warnmeldung anzeigen soll, wenn das Programm ein veraltetes Element (Deprecated, obsolete, obsolete) aufruft. Beispiel 2 zeigt, wie die Deprecated-Annotation verwendet wird.
Beispiel 2 für Java-Annotationen
Erstellen Sie zunächst eine Klasse und markieren Sie eine Methode wie folgt als veraltet:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse Test_Deprecated {
@Veraltet
public void doSomething() {
System.out.println("Test mit veralteter Annotation: 'Deprecated'");
}
}
Versuchen Sie als Nächstes, diese Methode aus einer anderen Klasse aufzurufen:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse TestAnnotations {
public static void main(String arg[]) löst eine Ausnahme aus {
neue TestAnnotations();
}
öffentliche TestAnnotations() {
Test_Deprecated t2=new Test_Deprecated();
t2.doSomething();
}
Die doSomething()-Methode ist in diesem Beispiel als veraltete Methode deklariert. Daher sollte diese Methode beim Kompilieren der Datei Test_Deprecated.java nicht aufgerufen werden Es wird eine Warnmeldung ähnlich dieser angezeigt (Eclipse warnt):
Kopieren Sie den Codecode wie folgt:
Kompilieren einer Quelldatei in den Ordner „D:tempNew“.
(2)Testen Sie JavaApplication1Build-Klassen
D:tempNeuer Ordner
(2)TestJavaApplication1srctestmyannotation
TestAnnotations.java:27:
Warnung: [Veraltung] doSomething() in
test.myannotation.Test_Deprecated ist veraltet
t2.doSomething();
1 Warnung
Anmerkung „Warnungen unterdrücken“.
Diese Annotation teilt dem Compiler mit, dass Warnmeldungen für das mit Anmerkungen versehene Element und alle Unterelemente unterdrückt werden sollen. Angenommen, Sie verwenden die Annotation „Suppresswarnings“ für eine Klasse Unterdrücken Sie eine Warnung. Wenn Sie die Annotation „Suppresswarnings“ für eine Methode verwenden, um eine andere Warnung zu unterdrücken, werden beide Warnungen auf Methodenebene unterdrückt.
Beispiel 3 für Java-Annotationen:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse TestAnnotations {
public static void main(String arg[]) löst eine Ausnahme aus {
new TestAnnotations().doSomeTestNow();
}
@SuppressWarnings({"deprecation"})
public void doSomeTestNow() {
Test_Deprecated t2 = new Test_Deprecated();
t2.doSomething();
}
}
In diesem Beispiel wird @SuppressWarnings verwendet, um die in Beispiel 2 gezeigte Veraltungswarnung zu unterdrücken. Da diese Art von Warnung für diese Methode unterdrückt wird, wird die Warnung „Veralterung“ nicht mehr angezeigt.
Hinweis: Es ist besser, diese Annotation für das innerste Element zu verwenden. Wenn Sie daher nur eine Warnung für eine bestimmte Methode unterdrücken möchten, sollten Sie sie für die Methode annotieren, anstatt die Annotation für die Klasse zu verwenden.
Meta-Annotationen (Java-Annotationstyp)
Meta-Anmerkungen, eigentlich Annotationen genannt, umfassen vier Arten:
1.Ziel
2. Aufbewahrung
3.Dokumentiert
4.Geerbt
Zielanmerkung
Die Zielanmerkung gibt an, auf welches Zielelement sich der Annotationstyp bezieht. Sie enthält die folgenden Aufzählungstypwerte:
1.@Target(ElementType.TYPE) – kann auf Elemente jeder Klasse angewendet werden
2.@Target(ElementType.FIELD) – gilt nur für Felder oder Eigenschaften
3.@Target(ElementType.METHOD) – gilt nur für Methodenanmerkungen
4.@Target(ElementType.PARAMETER) – gilt nur für Methodenparameter
5.@Target(ElementType.CONSTRUCTOR) – gilt nur für Konstruktoren
6.@Target(ElementType.LOCAL_VARIABLE) – gilt nur für lokale Variablen
7.@Target(ElementType.ANNOTATION_TYPE) – Zeigt an, dass der deklarierte Typ selbst ein Anmerkungstyp ist
Beispiel 4 demonstriert die Target-Annotation:
Java-Annotationsbeispiel 4
Zunächst wird ein Annotationstyp namens Test_Target mit der Metaannotation @Target definiert, wie unten gezeigt:
Kopieren Sie den Codecode wie folgt:
@Target(ElementType.METHOD)
public @interface Test_Target {
öffentlicher String doTestTarget();
}
Erstellen Sie als Nächstes eine Klasse, die mit Test_Target annotiert wird:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse TestAnnotations {
public static void main(String arg[]) {
new TestAnnotations().doTestTarget();
}
// Anmerkungen zu Methoden verwenden, OK.
// Es dürfen keine Zeilenumbrüche in der Mitte, 2 Zeilen usw. vorhanden sein. Java ignoriert redundante Zeilenumbrüche.
@Test_Target(doTestTarget="Hallo Welt!")
public void doTestTarget() {
System.out.printf("Zielannotation testen");
}
}
Die Annotation @Target(ElementType.METHOD) gibt an, dass der Annotationstyp nur zum Annotieren von Methoden verwendet werden kann. Wenn Sie diesen Code kompilieren, wird keine Warnmeldung angezeigt. Was passiert jedoch, wenn diese Annotation für eine Zeichenfolgenvariable deklariert wird? Was? So:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse TestAnnotations {
// Dies ist ein falscher Ansatz und die Kompilierung wird nicht erfolgreich sein, da sich die Anmerkung auf der falschen Ebene befindet.
// Metaanmerkungen geben an, dass nur Methoden mit Anmerkungen versehen werden können und nicht zum Annotieren von Eigenschaften verwendet werden können.
@Test_Target(doTestTarget="Hallo Welt!")
private String str;
public static void main(String arg[]) {
new TestAnnotations().doTestTarget();
}
public void doTestTarget() {
System.out.printf("Zielannotation testen");
}
}
Die einzige Änderung besteht darin, dass die Annotationsdeklaration von der Methodenebene auf die Feldebene verschoben wird, was falsch ist. Da Sie definiert haben, dass die Annotation @Test_Target nur auf Methodenebene gilt, erhalten Sie möglicherweise eine Fehlermeldung, wenn Sie versuchen, diese Klasse zu kompilieren Nachricht wie diese:
Kopieren Sie den Codecode wie folgt:
„TestAnnotations.java“:
D:R_AND_DTestAnnotationsrctestmyannotation
TestAnnotations.java:16:
Anmerkungstyp, der für diese Art von Deklaration in der Zeile nicht anwendbar ist
16, Spalte 0
@Test_Target(doTestTarget="Hallo Welt!")
^
Fehler bei der Javac-Kompilierung