Überblick
Java führte Annotation in Version 1.5 ein, auch als Java -Annotation bekannt. Annotation ist eine Art Syntax -Metadaten, die direkt im Quellcode verwendet werden kann, und Klassen/Methoden/Variablen/Parameter/Paketnamen usw. können kommentiert werden. Im Gegensatz zu Javadoc -Tags kann der Compiler den Annotationscode beibehalten, wenn die Klassendatei generiert wird. Gleichzeitig behält die Java Virtual Machine die Annotation bei, damit die relevanten Informationen über die Annotation durch Reflexion erhalten werden können, um Anmerkungen während des Laufzeitprozesses zu verwenden.
Eingebaute Anmerkungen
Tatsächlich begegnen wir häufig Anmerkungen wie @Override, @Deprecated usw. Dies sind alles integrierte Annotationen in JDK. Schauen wir uns zunächst an, was die wichtigsten eingebauten Anmerkungen in Java sind.
• Anmerkungen, die auf Java -Code reagieren
◦@Override prüft, ob eine Methode eine Umschreiben -Methode ist. Wenn diese Methode nicht in der übergeordneten Klasse oder in der implementierten Schnittstelle zu finden ist, tritt ein Kompilierungsfehler auf.
◦@veraltete Markierungen, die eine Methode oder Klasse verworfen wird. Wenn die Klasse oder Methode verwendet wird, alarmieren Sie mit dem Kompilierungsprozess.
◦@unterdrücktewarnings benachrichtigen den Compiler, Warnungen über die kommentierten Parameter zu ignorieren
◦@Safevarargs ignorieren Warnungen vor Aufrufen von Methoden oder Konstruktoren, die generische Parameter enthalten, 1.7 hat Annotationen hinzugefügt
◦@FunctionalInterface zeigt an, dass eine deklarierte Schnittstelle als funktionale Schnittstelle verwendet wird. 1.8 hat Annotation hinzugefügt
• Anmerkungen zu anderen Anmerkungen werden als Meta -Annotationen bezeichnet (Meta -Annotation)
◦@Retention gibt an, wann die kommentierte Annotation verwendet wird (dh, wann die Annotation beibehalten wird)
■ Nur im Quellcode aufbewahrt und während der Zusammenstellung verworfen (RetentionPolicy.Runtime)
■ Anmerkungen werden während der Zusammenstellung in der Klassendatei gespeichert und ignoriert, wenn die Klassendatei geladen wird (RetentionPolicy.class).
■ Anmerkungen werden gelesen, wenn die Klassendatei geladen wird, dh Anmerkungen sind während des Betriebs verfügbar. Anmerkungen können durch Reflexion (RetentionPolicy.Runtime) erhalten werden
◦@Dokumentiert zeigt an, dass beim Generieren von Javadoc die kommentierten Anmerkungen in das Javadoc -Dokument geschrieben werden.
◦@target Gibt den Umfang der kommentierten Annotation an. Konstruktor ■ elementtype.local_variable: verwendet, um die lokale Variable zu beschreiben. ■ elementtype.Annotation_type: verwendet, um die Annotation zu beschreiben ■ elementtype.package: verwendet, um das Paket zu beschreiben
◦ @erbelt weist darauf hin, dass die Annotation vererbt wird, dh, wenn ein von @Inherited modifiziertes Annotationstyp für eine Klasse verwendet wird, wirkt auch die Annotation auf die Unterklasse der modifizierten Klasse.
◦@wiederholbar zeigt an, dass die kommentierte Annotation mehrmals auf dasselbe Objekt angewendet werden kann. 1.9 hat Annotation hinzugefügt
Benutzerdefinierte Anmerkungen
Ich habe oben so viele Anmerkungen erwähnt, und jeder konzentriert sich auf Meta -Anmerkungen. Wenn wir die Anmerkungen anpassen, verwenden wir normalerweise Meta -Anmerkungen, um uns zu helfen. Das benutzerdefinierte Annotationsformat ist public @Interface Annotationsname {Definitionsbody}. Bei Verwendung @Interface Custom Annotation wird die Schnittstelle von java.lang.annotation.annotation automatisch vererbt. Bei Anpassung Anmerkungen können andere Anmerkungen oder Schnittstellen nicht vererbt werden. Die in Annotation deklarierte Methode ist tatsächlich ein Kommentarparameter. Der Name der Methode ist der Name des Parameters, und der Rückgabewerttyp ist der Typ des Parameters. Der Standardwert des Parameters kann standardmäßig deklariert werden.
Benutzerdefinierte Anmerkungen sind einfach. Verwenden Sie @Interface, um eine Annotation wie folgt zu definieren.
@Retention (retentionPolicy.runtime) @target (elementtype.type) @DocumentedPublic @Interface classInfo {String Author () Standard "Wang"; String date (); String Comments ();} Eine benutzerdefinierte Annotation namens Classinfo. Laut @Retention können Sie wissen, dass diese Anmerkung immer existieren wird, dh diese Annotation ist immer noch gültig, wenn das Programm ausgeführt wird. @Target (elementtype.type) bedeutet, dass Classinfo -Annotation auf der Klasse, Schnittstelle oder Enum -Deklaration wirkt; @Documented
Anweisungen Classinfo -Informationen können in Javadoc -Dokumente geschrieben werden.
Schauen wir uns einige Annotationsparameter in benutzerdefinierten Anmerkungen an. Es gibt drei Annotationsparameter. Die Annotationsparameter können standardmäßig festgelegt werden, z. B. der Parameter Annotation des Autors, der Standardwert ist Wang und die beiden anderen Parameter haben keine Standardwerte.
Schauen wir uns eine weitere benutzerdefinierte Annotation an.
@Retention (retentionPolicy.runtime) @target (elementtype.method) public @Interface methodInfo {String Beschreibung () Standard "no Beschreibung"; String date ();}Diese benutzerdefinierte Annotationsmethode, die an der Methode eingeht, und diese Annotation wird auch existieren, wenn das Programm ausgeführt wird. Es gibt zwei Annotationsparameter.
Um die Definition von Parametern (Methodendefinition) zu kommentieren, können Sie nur zwei Zugriffsrechtsmodifikatoren öffentlich oder Standard verwenden. Die Parametertypen unterstützen die folgenden Typen.
• Acht grundlegende Datentypen (Byte, Int, Short, Long, Float, Double, Char, Boolean)
• String -Typ
• Klassentyp
• Enum -Typ
• Annotationstyp
• Arrays aller oben genannten Typen
Verwendung von Anmerkungen
Zusätzlich zu den oben genannten zwei Anmerkungen wurde eine Annotation mit Feldumfang hinzugefügt.
@Retention (retentionPolicy.runtime) @target (elementtype.field) public @Interface fieldInfo {String type (); String name ();}Wenn die Standardwerte in benutzerdefinierten Anmerkungen nicht deklariert werden, müssen diesen Parametern Werte zugewiesen werden, wenn benutzerdefinierte Anmerkungen verwendet werden, andernfalls wird der Compiler einen Fehler meldet.
Schauen Sie sich den Code an, den die Annotation verwendet hat:
@Classinfo (Autor = "Wang", Date = "2016/9/13", comments = "Annotation Demo") öffentliche Klasse AnnotationDemo {@fieldInfo (type = "public", name = "Firstfield") public int Firstfield; @FieldInfo (type = "privat", name = "zweitfest") Private String SecondField; @Methodinfo (Beschreibung = "Methode in AnnotationDemo", name = "firstMethod") public void FirstMethod (String Value) {System.out.printf ("erste Methode involviert"); } @Methodinfo (Beschreibung = "Methode in AnnotationDemo", name = "SecondMethod") private void SecondMethod () {System.out.printf ("erste Methode involviert"); }}Abrufen von Annotationsinformationen
Um Annotationsinformationen zu erhalten, müssen wir zunächst sicherstellen, dass die Annotation während des Programmlaufs vorhanden ist. Daher fügen wir im Allgemeinen @Retention (RetentionPolicy.Runtime) Meta -Annotation zu benutzerdefinierten Anmerkungen hinzu. Auf diese Weise können wir während des Programmlaufs durch Reflexion einige Annotationsinformationen erhalten. Für Anweisungen zur Reflexion können Sie diesen Artikel anzeigen.
public class AnnotationTest {public static void main (String [] args) {ResolveClassAnnotationInfo (AnnotationDemo.Class); ResolVefieldAnnotationInfo (AnnotationDemo.Class); ResolvemethodannotationInfo (AnnotationDemo.Class); } private static void ResolveClassAnnotationInfo (Klasse <?> clz) {// Bestimmen Sie, ob diese Klasse ClassInfo -Annotation hat, wenn (clz.IsannotationPresent (classInfo.class)) {classInfo classInfo = (klassifisch) clz.getAnnotation (classInfo.classe); System.out.println (classInfo.author () + "" + classInfo.comments () + "" + classInfo.date ()); }} private static void ResolVefieldAnnotationInfo (Klasse <?> clz) {field [] fields = clz.getDeclaredfields (); für (Feldfeld: Felder) {if (field.isannotationPresent (fieldInfo.class)) {fieldInfo fieldInfo = (fieldInfo) field.getannotation (fieldInfo.class); System.out.println (fieldInfo.type () + "" + fieldInfo.name ()); }}} private static void ResolvemethodannotationInfo (Klasse <?> clz) {method [] methoden = clz.getDeclaredMethods (); für (Methodenmethode: Methoden) {if (method.IsAnnotationPresent (methodInfo.class)) {methodInfo methodInfo = (methodInfo) methode.getannotation (methodeInfo.class); System.out.println (methodInfo.name () + "" + methodInfo.description ()); }}}}Reflexion, um Feld/Methode in der Klasse usw. zu erhalten und relevante Anmerkungen durch GetAnnotation () oder getAnnotations () zu erhalten. Sie können bestimmte Informationen erhalten, indem Sie die spezifischen Anmerkungen abrufen.
Die Ausgabe des Laufergebnisses ist wie folgt:
Abbildung 1 Betriebsergebnisdiagramm
Zusammenfassen
Für Anfänger von Java und sogar Java -Entwicklern mit sicheren Erfahrung können sie weniger Java -Anmerkungen ausgesetzt sein. In Wirklichkeit werden Anmerkungen selten verwendet, aber sie werden sie oft im Code sehen. Dieser Artikel ist eine einfache Einführung in Anmerkungen und zumindest auf Codeebene ist es stressfrei zu lesen.
Das obige ist der gesamte Inhalt dieses Artikels. Ich hoffe, es wird für das Lernen aller hilfreich sein und ich hoffe, jeder wird Wulin.com mehr unterstützen.