1. Die häufigste Anmerkung
•@Override: Wird für Methoden verwendet, um anderen mitzuteilen, dass diese Methode die übergeordnete Klasse überschreibt
•@Veraltet: Es wird empfohlen, dass andere die alte API nicht verwenden. Sie generiert während der Kompilierung eine Warnmeldung und kann für alle Elemente im Programm festgelegt werden.
•@SuppressWarnings: Einige Warnmeldungen vorübergehend deaktivieren
•@Entity: Gibt an, dass diese Klasse eine persistente Klasse ist
2. Entwerfen Sie eine eigene Anmerkung
Lesen Sie zuerst den Code, bevor Sie sprechen
1. Annotationsimplementierung mit nur einem Parameter
Kopieren Sie den Codecode wie folgt:
Paket chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.TYPE)
@Retention(RetentionPolicy.RUNTIME)
@Dokumentiert
public @interface MyAnnotation1 {
String-Wert();
}
2. Annotationsimplementierung mit zwei Parametern
Kopieren Sie den Codecode wie folgt:
Paket chb.test.annotation;
import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Target(ElementType.METHOD)
@Retention(RetentionPolicy.RUNTIME)
@Dokumentiert
public @interface MyAnnotation2 {
String-Beschreibung();
boolean isAnnotation();
}
3. Experimentelle Annotationsklasse
Kopieren Sie den Codecode wie folgt:
Paket chb.test.annotation;
@MyAnnotation1("das ist annotation1")
öffentliche Klasse AnnotationDemo {
@MyAnnotation2(description="das ist annotation2",isAnnotation=true)
public void sayHello(){
System.out.println("Hallo Welt!");
}
}
4.Annotationstest-Beschreibungsklasse
Kopieren Sie den Codecode wie folgt:
Paket chb.test.annotation;
import java.lang.reflect.Method;
import org.junit.Test;
öffentliche Klasse TestAnnotation {
@Prüfen
public void test() löst ClassNotFoundException, SecurityException, NoSuchMethodException{ aus
Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
boolean flag = cls.isAnnotationPresent(MyAnnotation1.class);
if(flag){
System.out.println("Klasse als Annotation beurteilen");
MyAnnotation1 annotation1 = cls.getAnnotation(MyAnnotation1.class);
System.out.println(annotation1.value());
}
Methode method = cls.getMethod("sayHello");
flag = method.isAnnotationPresent(MyAnnotation2.class);
if(flag){
System.out.println("Die Beurteilungsmethode ist auch eine Annotation");
MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());
}
}
}
Als Ergebnis des Experiments gab die Konsole die folgenden Informationen aus:
Bestimmen Sie, ob es sich bei der Klasse um eine Annotation handelt
das ist annotation1
Die Beurteilungsmethode ist auch die Annotation
Das ist annotation2 true
3. Einführung und Erklärung
1. @Target(ElementType.TYPE) in MyAnnotation1
Der ElementType in @Target wird verwendet, um anzugeben, für welche Elemente der Annotation-Typ verwendet werden kann. Beispiel:
TYPE (Typ), FIELD (Attribut), METHOD (Methode), PARAMETER (Parameter), CONSTRUCTOR (Konstruktor), LOCAL_VARIABLE (lokale Variable), PACKAGE (Paket), wobei TYPE (Typ) sich auf den Typ bezieht, in dem verwendet werden kann Klassen-, Schnittstellen-, Enum- und Anmerkungstypen.
2. @Retention(RetentionPolicy.RUNTIME) in MyAnnotation1
RetentionPolicy verfügt über drei Strategien, nämlich:
•QUELLE: Diese Annotationstypinformationen werden nur im Programmquellcode beibehalten. Wenn der Quellcode kompiliert wird, verschwinden die Annotationsdaten und werden nicht in der kompilierten .class-Datei beibehalten.
•CLASS: Diese Annotationstypinformationen bleiben im Programmquellcode und auch in der kompilierten .class-Datei erhalten. Während der Ausführung werden diese Informationen nicht in die JVM geladen. Hinweis: Die Standardstrategie ist der Typ CLASS
•LAUFZEIT: Zeigt an, dass Informationen im Quellcode und in den kompilierten .class-Dateien erhalten bleiben und diese Informationen während der Ausführung in die JVM geladen werden.
3. @Dokumentiert in MyAnnotation1
Der Zweck besteht darin, diese Annotationsinformationen im JAVA-API-Dokument anzuzeigen. Wenn @Documented nicht hinzugefügt wird, werden die relevanten Annotationsinformationen nicht im JAVA-API-Dokument angezeigt.
4. @interface in MyAnnotation1
Schlüsselwort, das angibt, dass die Klasse für Annotation definiert ist
5. String value() in MyAnnotation1;
Zeigt an, dass ein Mitgliedsparameter mit dem Namenswert und dem Zugriffsrecht als Standardmodifikator vorhanden ist. Beachten Sie die folgenden zwei Punkte:
•Zugriffsrechte können nur mit public und default (Standard) geändert werden.
•Parametermitglieder können nur die acht grundlegenden Datentypen Byte, Short, Char, Int, Long, Float, Double, Boolean und Datentypen wie String, Enum, Class, Anmerkungen und Arrays dieser Typen verwenden
6.@MyAnnotation1("das ist annotation1") in AnnotationDemo
Da MyAnnotation1 nur einen Parameter hat, können Sie den Wert direkt in Klammern schreiben. Hinweis: Wenn die Anmerkung nur einen Parameter hat, wird empfohlen, den Parameternamen als Wert zu definieren
7.cls.isAnnotationPresent(MyAnnotation1.class) in TestAnnotation
Bestimmen Sie, ob die Klasse die Annotation von MyAnnotation1 verwendet
8. MyAnnotation1 in TestAnnotation annotation1 = cls.getAnnotation(MyAnnotation1.class)
Gibt die Annotation dieser Klasse für MyAnnotation1 zurück
9. method.isAnnotationPresent(MyAnnotation2.class) in TestAnnotation
Bestimmen Sie, ob die Methode die Annotation von MyAnnotation2 verwendet