Ich werde ein Beispielprogramm vorstellen, das eine selbst erstellte Annotation in Java erstellt und den Wert der Annotation erfasst.
C:\>java -version
java version "1.8.0_231"
Java(TM) SE Runtime Environment (build 1.8.0_231-b11)
Java HotSpot(TM) 64-Bit Server VM (build 25.231-b11, mixed mode)
C:\>
Dies ist ein Beispiel für selbst erstellte Anmerkungen. Hier haben die Mitglieder "Name" und "Wert".
MyAnnotation.java
package test01;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME) // (1) @Steuern Sie, wie viele Anmerkungsinformationen in Retantion gespeichert werden
@Target({ // (2) @Ziel Steuert, welcher Elementtyp mit Anmerkungen versehen werden kann
ElementType.TYPE,
ElementType.FIELD,
ElementType.CONSTRUCTOR,
ElementType.METHOD
})
public @interface MyAnnotation { // (3)Erstellen Sie MyAnnotation
String name();
int value() default 0;
}
Geben Sie an, bis zu welchem Zeitpunkt die Anmerkungsinformationen von "@ Retention" in (1) beibehalten werden.
Das Folgende kann hauptsächlich für "@ Retention" eingestellt werden.
Wert | Erläuterung |
---|---|
RetentionPolicy.SOURCE | Anmerkungen werden nur auf Quellenebene beibehalten und vom Compiler ignoriert. |
RetentionPolicy.CLASS | Anmerkungen werden vom Compiler zur Kompilierungszeit beibehalten, von der Java Virtual Machine (JVM) jedoch ignoriert. |
RetentionPolicy.RUNTIME | Anmerkungen werden von der JVM beibehalten und können in einer Laufzeitumgebung verwendet werden. |
Geben Sie hier "RetentionPolicy.RUNTIME" an.
Geben Sie in (2) den Ort an, an dem die Anmerkung mit "@ Target" angewendet werden kann.
Das Folgende kann hauptsächlich für "@ Target" eingestellt werden.
Wert | Erläuterung |
---|---|
ElementType.TYPE | Machen Sie es anwendbar auf Klassen, Schnittstellen, Anmerkungen und Aufzählungstypen. |
ElementType.FIELD | Machen Sie es auf das Feld anwendbar. |
ElementType.CONSTRUCTOR | Machen Sie es auf den Konstruktor anwendbar. |
ElementType.METHOD | Machen Sie es auf die Methode anwendbar. |
Geben Sie hier "ElementType.TYPE", "ElementType.FIELD", "ElementType.CONSTRUCTOR" und "ElementType.METHOD" in "@ Target" an.
Erstellen Sie in (3) eine Anmerkung mit dem Namen "MyAnnotation". Setzen Sie die Mitglieder auf "Name" und "Wert".
Fügen Sie den Klassen, Feldern, Konstruktoren und Methoden der Klasse "Sample" Ihre eigene "MyAnnotation" hinzu.
Sample.java
package test01;
@MyAnnotation(name="class", value=100) // (1)Gewähren Sie der Klasse MyAnnotation
public class Sample {
@MyAnnotation(name="field", value=200) // (2)Gewähren Sie dem Feld MyAnnotation
private String name;
@MyAnnotation(name="constructor", value=300) // (3)Fügen Sie MyAnnotation zum Konstruktor hinzu
public Sample() {}
@MyAnnotation(name="method", value=400) // (4)Gewähren Sie der Methode MyAnnotation
public void execute() {
System.out.println("execute");
}
}
(1) Fügen Sie der Klasse Ihre eigene Anmerkung (MyAnnotation
) hinzu.
(2) Fügen Sie dem Feld Ihre eigene Anmerkung ("MyAnnotation") hinzu.
(3) Fügen Sie dem Konstruktor Ihre eigene Annotation (MyAnnotation
) hinzu.
(4) Fügen Sie der Methode Ihre eigene Anmerkung (MyAnnotation
) hinzu.
Main.java
package test01;
import java.lang.reflect.Constructor;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
public class Main {
public static void main(String[] args)
throws ClassNotFoundException, NoSuchMethodException, NoSuchFieldException, SecurityException {
// (1)Holen Sie sich die Annotation (MyAnnotation), die an die Klasse angehängt ist
Class<?> clazz = Class.forName("test01.Sample");
MyAnnotation annoClass = (MyAnnotation) clazz.getAnnotation(MyAnnotation.class);
System.out.println("class annotation : name=" + annoClass.name() + ", value=" + annoClass.value());
// (2)Holen Sie sich die Annotation (MyAnnotation) an das Feld angehängt
Field field = clazz.getDeclaredField("name");
MyAnnotation annoField = (MyAnnotation) field.getAnnotation(MyAnnotation.class);
System.out.println("field annotation : name=" + annoField.name() + ", value=" + annoField.value());
// (3)Holen Sie sich die Annotation (MyAnnotation) an den Konstruktor
Constructor<?> cons = clazz.getConstructor();
MyAnnotation annoCons = (MyAnnotation) cons.getAnnotation(MyAnnotation.class);
System.out.println("constructor annotation : name=" + annoCons.name() + ", value=" + annoCons.value());
// (4)Holen Sie sich die Annotation (MyAnnotation) an die Methode angehängt
Method method = clazz.getMethod("execute");
MyAnnotation annoMethod = (MyAnnotation) method.getAnnotation(MyAnnotation.class);
System.out.println("method annotation : name=" + annoMethod.name() + ", value=" + annoMethod.value());
}
}
(1) Erfasst den Inhalt der Anmerkung ("MyAnnotation"), die der Klasse "Sample" beigefügt ist, und zeigt sie an. (2) Erfasst den Inhalt der Anmerkung ("MyAnnotation"), die an den Feldnamen "der Klasse" Sample "angehängt ist, und zeigt ihn an. (3) Erfasst den Inhalt der Annotation ("MyAnnotation"), die an den Konstruktor der "Sample" -Klasse angehängt ist, und zeigt sie an. (4) Erfasst den Inhalt der Annotation ("MyAnnotation"), die an die "execute" -Methode der "Sample" -Klasse angehängt ist, und zeigt sie an.
Lesson: Annotations (The Java™ Tutorials < Learning the Java Language)
das ist alles
Recommended Posts