1. RetentionPolicy.Source: Die Annotation wird nur in der Quelldatei aufbewahrt. Wenn die Java -Datei in eine Klassendatei zusammengestellt wird, wird die Annotation aufgegeben.
2. RetentionPolicy.class: Die Annotation wird an die Klassendatei beibehalten, wird jedoch aufgegeben, wenn JVM die Klassendatei lädt. Dies ist der Standardlebenszyklus;
3.. RetentionPolicy.Runtime: Die Annotation wird nicht nur in der Klassendatei gespeichert, sondern existiert dennoch, nachdem JVM die Klassendatei geladen hat.
Diese drei Lebenszyklen entsprechen: Java-Quelldatei (.Java-Datei) --->. Klassendatei ----> Bytecode im Speicher.
Wie wählen Sie den richtigen Annotationslebenszyklus aus?
Zunächst müssen wir die Quelle der Lebenszykluslänge <Klasse <Laufzeit klären, sodass der erstere handeln kann, das letztere handeln kann. Wenn Sie zur Laufzeit dynamisch Annotationsinformationen erhalten müssen, können Sie im Allgemeinen nur Laufzeitanmerkungen verwenden. Wenn Sie zum Kompilierungszeit einige Vorverarbeitungsvorgänge ausführen möchten, z. B. ein Hilfscode (z. B. Butterknife), können Sie Klassenanmerkungen verwenden. Wenn Sie nur einige Überprüfungsvorgänge wie @Override und @SuppressWarnings durchführen, können Sie Quellanmerkungen verwenden.
Das Folgende ist eine einfache Anwendung von Laufzeitanmerkungen.
Annotation bekommen
Sie müssen Laufzeitanmerkungen durch Reflexion erhalten, die aus Paket, Klasse, Feld, Methode bezogen werden können. Die grundlegenden Methoden sind gleich. Mehrere gemeinsame Methoden sind wie folgt:
/** * Get annotation of the specified type*/public <A extends Annotation> A getAnnotation(Class<A> annotationType);/** * Get all annotations, if any*/public Annotation[] getAnnotations();/** * Get all annotations, ignore inherited annotations*/public Annotation[] getDeclaredAnnotations();/** * Specify whether the annotation In diesem Element existiert, dass es true zurückgibt, wenn es ansonsten falsche*/public boolean iannotationPresent gibt (Klasse <? Erweitert Annotation> AnnotationTyp);/***Holen Sie sich alle Annotationen für Parameter in der Methode*/öffentliche Annotation [] [] getParameterAnnotations ();
Um diese Funktionen zu verwenden, müssen Sie zunächst die entsprechenden Elemente durch Reflexion erhalten: Klasse, Feld, Methode usw.
Benutzerdefinierte Anmerkungen
Schauen wir uns die einfache Möglichkeit an, benutzerdefinierte Anmerkungen zu verwenden. Hier definieren wir zuerst 3 Laufzeitanmerkungen:
// anwendbare Klasse, Schnittstelle (einschließlich Annotationstyp) oder Enum @Retention (retentionPolicy.runtime) @target (elementtype.type) public @Interface classInfo {String value (); } // anwendbare Feldattribute, auch Enum Constants @Retention (retentionPolicy.runtime) @target (elementtype.field) public @Interface fieldInfo {int [] value () enthalten; } // anwendbare Methode @retention (retentionPolicy.Runtime) @target (elementtype.method) public @Interface methodInfo {String name () Standard "long"; String data (); int age () Standard 27; }Diese drei Anmerkungen sind für verschiedene Elemente anwendbar und alle haben unterschiedliche Attribute. Bei Verwendung von Anmerkungen müssen Sie diese Attributwerte festlegen.
Definieren Sie eine andere Testklasse, um diese Anmerkungen zu verwenden:
/*** TEST -Laufzeitannotation*/@classInfo ("Testklasse") public class testRuntimeAnnotation {@fieldInfo (value = {1, 2}) public String fieldInfo = "fieledInfo";@fieldinfo (value = {10086}) public int i = 100; @MethInfo (name = name = "bluebird", data = 100; @methinfo (name = "bluebird". getMethodinfo () {return testRuntimeAnnotation.class.getSimplename ();}}Es ist immer noch sehr einfach zu bedienen. Lassen Sie uns schließlich sehen, wie Sie Annotationsinformationen im Code erhalten:
/*** TEST -Laufzeitannotation*/private void _TestruntimeAnnotation () {StringBuffer sb = new StringBuffer (); Klasse <?> Cls = testRuntimeAnnotation.Class; Konstruktor <? ") .Append ("/n "); classInfo classInfo = cls.getAnnotation (classInfo.class); if (classInfo! Wert: ") .Append (classInfo.value ()). append ("/n/n ");} sb.append (" Feldannotation: ") .Append ("/n "); (FieldInfo! ") .Append (arrays.toString (fieldInfo.value ()). append ("/n/n ");}} sb.append (" Methode Annotation: ") .Append ("/n "); method.getAnnotation (methodInfo.class); if (methodinfo! .Append (method.getName ()). append ("/n"); sb.append ("Annotationswert:") .Append ("/n"); ") .Append (methodInfo.data ()). append ("/n ");Die Operationen werden durchgeführt, um das entsprechende Element durch Reflexion zu erhalten, dann die Annotation am Element zu erhalten und schließlich den Attributwert der Annotation zu erhalten.
Schauen wir uns die Ausgabe an, hier werde ich sie direkt auf meinem Telefon anzeigen:
Zusammenfassen
Das obige ist die detaillierte Erklärung der grundlegenden Konzepte der Annotation von Java -Sprache, und ich hoffe, dass es für alle hilfreich sein wird. Interessierte Freunde können weiterhin auf andere verwandte Themen auf dieser Website verweisen. Wenn es Mängel gibt, hinterlassen Sie bitte eine Nachricht, um darauf hinzuweisen. Vielen Dank an Freunde für Ihre Unterstützung für diese Seite!