Aufbewahrungsanmerkung
Die Aufbewahrungsanmerkung gibt an, bis zu welcher Stufe diese Art von Anmerkung beibehalten wird. Es gibt drei Werte:
1.RetentionPolicy.SOURCE – Diese Art von Anmerkungen wird nur auf der Quellcodeebene beibehalten und während der Kompilierung ignoriert.
2.RetentionPolicy.CLASS – Diese Art von Anmerkungen wird während der Kompilierung beibehalten und ist in der Klassendatei vorhanden, wird jedoch von der JVM ignoriert
3.RetentionPolicy.RUNTIME – Anmerkungen dieses Typs werden von der JVM beibehalten, sodass sie von der JVM oder anderem Code mithilfe des Reflexionsmechanismus zur Laufzeit gelesen und verwendet werden können.
Beispiel 5 demonstriert die Deklaration von RetentionPolicy.RUNTIME:
Beispiel 1 für Java-Annotationen:
Kopieren Sie den Codecode wie folgt:
@Retention(RetentionPolicy.RUNTIME)
public @interface Test_Retention {
String doTestRetention();
}
In diesem Beispiel gibt die Annotation @Retention(RetentionPolicy.RUNTIME) an, dass die Annotation Test_Retention von der virtuellen Maschine beibehalten wird, sodass sie zur Laufzeit durch Reflektion gelesen werden kann.
Dokumentierte Anmerkungen
Die dokumentierte Annotation gibt an, dass diese Annotation vom Javadoc-Tool aufgezeichnet werden soll. Standardmäßig enthält Javadoc keine Annotationen. Wenn jedoch bei der Deklaration einer Annotation @Documented angegeben wird, werden sie von Tools wie Javadoc verarbeitet, also die Annotationstypinformationen wird auch in der generierten Dokumentation enthalten sein. Beispiel 6 demonstriert die Verwendung von @Documented weiter:
Beispiel 2 für Java-Annotationen:
Kopieren Sie den Codecode wie folgt:
@Dokumentiert
public @interface Test_Documented {
String doTestDocument();
}
Als nächstes ändern Sie die TestAnnotations-Klasse wie folgt:
Kopieren Sie den Codecode wie folgt:
öffentliche Klasse TestAnnotations {
public static void main(String arg[]) {
new TestAnnotations().doSomeTestRetention();
new TestAnnotations().doSomeTestDocumented();
}
@Test_Retention (doTestRetention="Annotationsinformationstest beibehalten")
public void doSomeTestRetention() {
System.out.printf("Annotationstyp 'Retention' testen");
}
@Test_Documented(doTestDocument="Hallo Dokument")
public void doSomeTestDocumented() {
System.out.printf("Testanmerkungstyp 'Dokumentiert'");
}
}
Wenn Sie nun den Befehl javadoc verwenden, um die Datei TestAnnotations.html zu generieren, werden Ergebnisse ähnlich wie in Abbildung 1 angezeigt.
Wie Sie dem Screenshot entnehmen können, gibt es im Dokument keine annotation-type information ()-Methode der doSomeTestRetention()-Methode. Das Dokument der doSomeTestDocumented()-Methode stellt jedoch die Beschreibungsinformationen der Annotation bereit Das Tag „@Documented“ wurde zur Annotation „Test_Documented“ hinzugefügt. In der vorherigen Annotation „Test_Retention“ wurde das Tag „@Documented“ nicht angegeben.
Geerbte Anmerkung (möglicherweise stimmt mit diesem Absatz etwas nicht ...)
Dies ist ein etwas komplexerer Annotationstyp. Er zeigt an, dass die annotierte Klasse automatisch erbt, wenn beim Definieren der Annotation das Tag @Inherited verwendet wird und dann die definierte Annotation zum Annotieren einer anderen übergeordneten Klasse verwendet wird Hat eine Unterklasse, werden alle Eigenschaften der übergeordneten Klasse an ihre Unterklasse vererbt. In Beispiel 7 sehen Sie die Vorteile der Verwendung des @Inherited-Tags.
Beispiel 3 für Java-Annotationen
Definieren Sie zunächst Ihre Anmerkung:
Kopieren Sie den Codecode wie folgt:
@Inherited
public @interface MyParentObject {
boolean isInherited() default true;
String doSomething() default „Do what?“;
}
Als nächstes wird eine Klasse mit Annotationen versehen:
Kopieren Sie den Codecode wie folgt:
@MyParentObject
öffentliche Klasse MyChildObject {
}
Wie Sie sehen, müssen Sie die Schnittstellenmethoden nicht in der Implementierungsklasse definieren, da diese automatisch vererbt werden. Wie würde es aussehen, wenn Sie eine alte Methode zur Definition der Implementierungsklasse verwenden würden? Schauen Sie sich unten um. Dies ist eine alte Implementierung:
Kopieren Sie den Codecode wie folgt:
Die öffentliche Klasse MyChildObject implementiert MyParentObject {
öffentlicher boolescher Wert isInherited() {
return false;
}
öffentlicher String doSomething() {
zurückkehren "";
}
öffentlicher boolescher Wert gleich(Objekt obj) {
return false;
}
public int hashCode() {
0 zurückgeben;
}
öffentlicher String toString() {
zurückkehren "";
}
öffentliche Klasse annotationType() {
null zurückgeben;
}
}
Erkennen Sie den Unterschied? Wie Sie sehen, müssen Sie zusätzlich zu den Methoden isInherited() und doSomething() von myParentObject auch die Methoden equal() und toString( implementieren. ) und die Methode hasCode(). Es gibt auch die Methode annotationType() der Klasse java.lang.annotation.Annotation. Unabhängig davon, ob Sie diese Methoden implementieren möchten oder nicht, müssen Sie diese in das geerbte Objekt einschließen.
abschließend
In diesem Artikel erfahren Sie, wie Sie die Entwicklung vereinfachen können, indem Sie die Annotationsfunktion von JDK5 verwenden. Annotationen haben keinen direkten Einfluss auf die Semantik des Programms. Entwicklungs- und Bereitstellungstools können diese Annotationen auf eine Art und Weise lesen und verwenden, indem sie das Programm verwenden, das die Annotationen enthält kann die zusätzlichen Java-Quelldateien, XML-Dokumente oder andere alte Artefakte ersetzen, kann das Gleiche mit weniger Code erreichen und bietet eine bessere Fehlererkennung zur Kompilierungszeit. Der Zweck von Annotationen besteht darin, weniger Zeit mit harten und nutzlosen Details zu verbringen und sich mehr auf Geschäftslogikregeln zu konzentrieren. Dieser Artikel ist der erste Teil der Java-Annotationsreihe Im dritten Teil sehen Sie schließlich ein komplexes Beispiel, das mehrere Datenbanktabellen umfasst.