Je vais présenter un exemple de programme qui crée une annotation personnalisée en Java et acquiert la valeur de l'annotation.
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:\>
Ceci est un exemple d'annotation personnalisée. Ici, les membres ont "nom" et "valeur".
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) @Contrôlez la quantité d'informations d'annotation conservées dans Retantion
@Target({ // (2) @Target Contrôle quel type d'élément peut être annoté
ElementType.TYPE,
ElementType.FIELD,
ElementType.CONSTRUCTOR,
ElementType.METHOD
})
public @interface MyAnnotation { // (3)Créer MyAnnotation
String name();
int value() default 0;
}
Spécifiez à quel stade les informations d'annotation sont conservées par @ Retention dans (1).
Les éléments suivants peuvent être principalement définis pour «@ Retention».
| valeur | La description |
|---|---|
| RetentionPolicy.SOURCE | Les annotations sont conservées uniquement au niveau source et sont ignorées par le compilateur. |
| RetentionPolicy.CLASS | Les annotations sont conservées par le compilateur au moment de la compilation, mais sont ignorées par la machine virtuelle Java (JVM). |
| RetentionPolicy.RUNTIME | Les annotations sont conservées par la JVM et peuvent être utilisées dans un environnement d'exécution. |
Ici, spécifiez RetentionPolicy.RUNTIME.
Spécifiez l'emplacement où l'annotation peut être appliquée avec @ Target dans (2).
Les éléments suivants peuvent être principalement définis pour «@ Target».
| valeur | La description |
|---|---|
| ElementType.TYPE | Rendez-le applicable aux classes, interfaces, annotations et types enum. |
| ElementType.FIELD | Rendez-le applicable au terrain. |
| ElementType.CONSTRUCTOR | Rendez-le applicable au constructeur. |
| ElementType.METHOD | Rendez-le applicable à la méthode. |
Ici, spécifiez ʻElementType.TYPE, ʻElementType.FIELD, ʻElementType.CONSTRUCTOR et ʻElementType.METHOD dans @ Target.
Dans (3), créez une annotation avec le nom «MyAnnotation». Définissez les membres sur «nom» et «valeur».
Ajoutez votre propre MyAnnotation aux classes, champs, constructeurs et méthodes de la classe Sample.
Sample.java
package test01;
@MyAnnotation(name="class", value=100) // (1)Accorder MyAnnotation à la classe
public class Sample {
@MyAnnotation(name="field", value=200) // (2)Accorder MyAnnotation au champ
private String name;
@MyAnnotation(name="constructor", value=300) // (3)Ajouter MyAnnotation au constructeur
public Sample() {}
@MyAnnotation(name="method", value=400) // (4)Accorder MyAnnotation à la méthode
public void execute() {
System.out.println("execute");
}
}
(1) Ajoutez votre propre annotation (MyAnnotation) à la classe.
(2) Ajoutez votre propre annotation (MyAnnotation) dans le champ.
(3) Ajoutez votre propre annotation (MyAnnotation) au constructeur.
(4) Ajoutez votre propre annotation (MyAnnotation) à la méthode.
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)Obtenez l'annotation (MyAnnotation) attachée à la classe
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)Obtenez l'annotation (MyAnnotation) attachée au champ
Field field = clazz.getDeclaredField("name");
MyAnnotation annoField = (MyAnnotation) field.getAnnotation(MyAnnotation.class);
System.out.println("field annotation : name=" + annoField.name() + ", value=" + annoField.value());
// (3)Obtenez l'annotation (MyAnnotation) attachée au constructeur
Constructor<?> cons = clazz.getConstructor();
MyAnnotation annoCons = (MyAnnotation) cons.getAnnotation(MyAnnotation.class);
System.out.println("constructor annotation : name=" + annoCons.name() + ", value=" + annoCons.value());
// (4)Obtenez l'annotation (MyAnnotation) attachée à la méthode
Method method = clazz.getMethod("execute");
MyAnnotation annoMethod = (MyAnnotation) method.getAnnotation(MyAnnotation.class);
System.out.println("method annotation : name=" + annoMethod.name() + ", value=" + annoMethod.value());
}
}
(1) Acquiert et affiche le contenu de l'annotation (MyAnnotation) attachée à la classe Sample.
(2) Acquiert et affiche le contenu de l'annotation (MyAnnotation) attachée au champ nom de la classe Sample.
(3) Acquiert et affiche le contenu de l'annotation (MyAnnotation) attachée au constructeur de la classe Sample.
(4) Acquiert et affiche le contenu de l'annotation (MyAnnotation) attachée à la méthode ʻexecute de la classe Sample`.
Lesson: Annotations (The Java™ Tutorials < Learning the Java Language)
c'est tout