Heim  >  Artikel  >  Java  >  Einführung in die Aufbewahrung, Dokumentation und Vererbung von Java-Annotationen

Einführung in die Aufbewahrung, Dokumentation und Vererbung von Java-Annotationen

高洛峰
高洛峰Original
2017-01-23 15:21:531427Durchsuche

Aufbewahrungsanmerkung

Aufbewahrungsanmerkung (Aufbewahrungsanmerkung) gibt an, dass diese Art von Anmerkung bis zu diesem Zeitpunkt beibehalten wird. Es gibt drei Werte:
1.RetentionPolicy.SOURCE – Diese Art von Anmerkungen werden nur beibehalten Auf der Quellcodeebene wird es zur Kompilierungszeit ignoriert
2.RetentionPolicy.CLASS – Diese Art von Anmerkungen wird zur Kompilierzeit beibehalten und ist in der Klassendatei vorhanden, aber die JVM ignoriert
3.LAUFZEIT – 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 zeigt die Deklaration von RetentionPolicy.RUNTIME:

Beispiel 1 von Java-Annotationen:

@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 durch Reflektion gelesen werden kann Laufzeit Take.

Dokumentierte Annotation

Dokumentierte Annotation gibt an, dass diese Annotation vom Javadoc-Tool aufgezeichnet werden soll. Standardmäßig enthält Javadoc keine Annotationen, wenn jedoch @Documented beim Deklarieren einer Annotation angegeben wird , es Wird von Tools wie Javadoc verarbeitet, sodass die Annotationstypinformationen auch in das generierte Dokument aufgenommen werden. Beispiel 6 demonstriert weiter die Verwendung von @Documented:

Beispiel 2 der Java-Annotation:

@Documented
public @interface Test_Documented {
   String doTestDocument();
}

Ändern Sie als Nächstes die TestAnnotations-Klasse wie folgt:

public class TestAnnotations {
   public static void main(String arg[]) {
      new TestAnnotations().doSomeTestRetention();
      new TestAnnotations().doSomeTestDocumented();
   }
   @Test_Retention (doTestRetention="保留注解信息测试")
   public void doSomeTestRetention() {
      System.out.printf("测试注解类型 'Retention'");
   }
   @Test_Documented(doTestDocument="Hello document")
   public void doSomeTestDocumented() {
      System.out.printf("测试注解类型 'Documented'");
   }
}

Wenn Sie nun den Befehl javadoc verwenden, um die Datei TestAnnotations.html zu generieren, sehen Sie ein Ergebnis ähnlich wie in Abbildung 1 .

Einführung in die Aufbewahrung, Dokumentation und Vererbung von Java-Annotationen

Wie Sie dem Screenshot entnehmen können, gibt es im Dokument keine annotation-type information()-Methode für die doSomeTestRetention()-Methode Die Methode „doSomeTestDocumented()“ stellt die Beschreibungsinformationen der Annotation bereit. Dies liegt daran, dass das Tag „@Documented“ zur Annotation „Test_Documented“ hinzugefügt wurde. Möglicherweise liegt ein Problem mit diesem Absatz vor...)

Dies ist ein etwas komplexerer Annotationstyp. Er zeigt an, dass die annotierte Klasse automatisch erbt. Genauer gesagt, wenn das @Inherited-Tag beim Definieren verwendet wird Annotation, und dann wird die definierte Annotation zum Annotieren einer anderen übergeordneten Klasse verwendet. Die übergeordnete Klasse verfügt über eine weitere Unterklasse (Unterklasse). Alle Attribute der übergeordneten Klasse werden an ihre Unterklasse vererbt. In Beispiel 7 werden Sie die Vorteile der Verwendung sehen @Inherited-Tag.

Beispiel 3 für Java-Annotationen

Definieren Sie zunächst Ihre Annotation:

Annotieren Sie als Nächstes eine Klasse mit der Annotation:
@Inherited
public @interface MyParentObject { 
      boolean isInherited() default true;
      String doSomething() default "Do what?";
}

Wie Sie sehen, müssen keine Schnittstellenmethoden in der Implementierungsklasse definiert werden. Aufgrund des @Inherited-Tags werden diese automatisch vererbt. Wie würde es aussehen, wenn Sie die Implementierungsklasse in einer alten Klasse definieren würden? Schauen Sie sich die alte Implementierung unten an:
@MyParentObject
public Class MyChildObject {
}

Sehen Sie den Unterschied? Wie Sie sehen, müssen Sie zusätzlich zu isInherited() und doSomething() alle Methoden der übergeordneten Schnittstelle implementieren. Methoden von myParentObject, Sie müssen auch die Methoden java.lang.Object (), toString() und hasCode() implementieren. Es gibt auch die Methode annotationType() der Klasse java.lang.annotation.Annotation Um diese Methoden zu implementieren oder nicht, müssen Sie diese in das geerbte Objekt einbinden.
public class MyChildObject implements MyParentObject {
   public boolean isInherited() {
      return false;
   }
   public String doSomething() {
      return "";
   }
   public boolean equals(Object obj) {
      return false;
   }
   public int hashCode() {
      return 0;
   }
   public String toString() {
      return "";
   }
   public Class annotationType() {
      return null;
   }
}

Fazit

Dieser Artikel zeigte Ihnen, wie Sie die Entwicklung durch die Verwendung der Annotationsfunktion von JDK5 vereinfachen können. Annotationen sind nicht direkt möglich Entwicklungs- und Bereitstellungstools können diese Annotationen irgendwie lesen und verarbeiten. Mit ihnen können Programme, die Annotationen verwenden, zusätzliche Java-Quelldateien, XML-Dokumente oder andere alte Artefakte ersetzen Der Zweck von Annotationen besteht darin, weniger Zeit mit harten und nutzlosen Details zu verbringen und sich mehr auf Geschäftslogikregeln zu konzentrieren. Sie erfahren, wie Sie Annotationen verwenden, um ein einfaches Webanwendungsprogramm zu entwickeln. Im dritten Teil sehen Sie schließlich ein komplexes Beispiel, das mehrere Datenbanktabellen enthält.

Weitere relevante Artikel zur Einführung von Retention. Dokumentiert und in Java vererbt, achten Sie bitte auf die chinesische PHP-Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn