1. L'annotation la plus courante
•@Override : utilisé sur les méthodes pour indiquer aux autres que cette méthode remplace la classe parent
•@Obsolète : Il est recommandé aux autres de ne pas utiliser l'ancienne API. Elle générera un message d'avertissement lors de la compilation et pourra être définie sur tous les éléments du programme.
•@SuppressWarnings : désactivez temporairement certains messages d'avertissement.
•@Entity : indique que cette classe est une classe persistante
2. Concevez votre propre annotation
Lisez le code avant de parler
1. Implémentation d'annotation avec un seul paramètre
Copiez le code comme suit :
paquet chb.test.annotation;
importer java.lang.annotation.Documented ;
importer java.lang.annotation.ElementType ;
importer java.lang.annotation.Retention ;
importer java.lang.annotation.RetentionPolicy ;
importer java.lang.annotation.Target ;
@Target (ElementType.TYPE)
@Rétention(RetentionPolicy.RUNTIME)
@Documenté
public @interface MonAnnotation1 {
Valeur de chaîne();
}
2. Implémentation d'annotations avec deux paramètres
Copiez le code comme suit :
paquet chb.test.annotation;
importer java.lang.annotation.Documented ;
importer java.lang.annotation.ElementType ;
importer java.lang.annotation.Retention ;
importer java.lang.annotation.RetentionPolicy ;
importer java.lang.annotation.Target ;
@Target (ElementType.METHOD)
@Rétention(RetentionPolicy.RUNTIME)
@Documenté
public @interface MonAnnotation2 {
Description de la chaîne();
booléen isAnnotation();
}
3. Classe expérimentale d'annotation
Copiez le code comme suit :
paquet chb.test.annotation;
@MyAnnotation1("c'est annotation1")
classe publique AnnotationDemo {
@MyAnnotation2(description="ceci est annotation2",isAnnotation=true)
public void sayBonjour(){
System.out.println("Bonjour tout le monde !");
}
}
4.Classe de description des tests d'annotation
Copiez le code comme suit :
paquet chb.test.annotation;
importer java.lang.reflect.Method ;
importer org.junit.Test ;
classe publique TestAnnotation {
@Test
public void test() lance ClassNotFoundException, SecurityException, NoSuchMethodException{
Class<?> cls = Class.forName("chb.test.annotation.AnnotationDemo");
indicateur booléen = cls.isAnnotationPresent(MyAnnotation1.class);
si(drapeau){
System.out.println("Juger la classe comme étant une annotation");
MonAnnotation1 annotation1 = cls.getAnnotation(MonAnnotation1.class);
System.out.println(annotation1.value());
}
Méthode méthode = cls.getMethod("sayHello");
flag = method.isAnnotationPresent(MyAnnotation2.class);
si(drapeau){
System.out.println("La méthode de jugement est aussi une annotation");
MyAnnotation2 annotation2 = method.getAnnotation(MyAnnotation2.class);
System.out.println(annotation2.description()+"/t"+annotation2.isAnnotation());
}
}
}
À la suite de l'expérience, la console affiche les informations suivantes :
Déterminer si la classe est une annotation
c'est l'annotation1
La méthode de jugement est aussi une annotation
c'est annotation2 vrai
3. Introduction et explication
1. @Target(ElementType.TYPE) dans MyAnnotation1
Le ElementType dans @Target est utilisé pour spécifier sur quels éléments le type Annotation peut être utilisé. Par exemple :
TYPE (type), FIELD (attribut), METHOD (méthode), PARAMETER (paramètre), CONSTRUCTOR (constructeur), LOCAL_VARIABLE (variable locale), PACKAGE (package), où TYPE (type) fait référence au type qui peut être utilisé dans Types de classe, d’interface, d’énumération et d’annotation.
2. @Retention(RetentionPolicy.RUNTIME) dans MyAnnotation1
RetentionPolicy a trois stratégies, à savoir :
•SOURCE : Ces informations de type Annotation ne seront conservées que dans le code source du programme. Si le code source est compilé, les données d'Annotation disparaîtront et ne seront pas conservées dans le fichier .class compilé.
•CLASS : Ces informations de type Annotation sont conservées dans le code source du programme ainsi que dans le fichier .class compilé. Lors de l'exécution, ces informations ne seront pas chargées dans la JVM. Remarque : La stratégie par défaut est de type CLASS
•RUNTIME : indique que les informations sont conservées dans le code source et les fichiers .class compilés, et que ces informations seront chargées dans la JVM lors de l'exécution.
3. @Documenté dans MyAnnotation1
Le but est d'afficher ces informations d'annotation sur le document API JAVA. Si @Documented n'est pas ajouté, les informations d'annotation pertinentes ne seront pas affichées sur le document API JAVA.
4. @interface dans MyAnnotation1
Mot clé indiquant que la classe est définie pour l'annotation
5. String value() dans MyAnnotation1 ;
Indique qu'il existe un paramètre membre avec la valeur name et le droit d'accès comme modificateur par défaut. Notez les deux points suivants :
•Les droits d'accès ne peuvent être modifiés qu'avec public et default (par défaut)
• Les membres Parameter ne peuvent utiliser que les huit types de données de base : byte, short, char, int, long, float, double, boolean et les types de données tels que String, Enum, Class, annotations et tableaux de ces types.
6.@MyAnnotation1("ceci est annotation1") dans AnnotationDemo
Étant donné que MyAnnotation1 n'a qu'un seul paramètre, vous pouvez écrire la valeur directement entre parenthèses. Remarque : Si l'annotation n'a qu'un seul paramètre, il est recommandé que le nom du paramètre soit défini comme valeur.
7.cls.isAnnotationPresent (MyAnnotation1.class) dans TestAnnotation
Déterminer si la classe utilise l'annotation de MyAnnotation1
8. MyAnnotation1 dans TestAnnotation annotation1 = cls.getAnnotation(MyAnnotation1.class)
Renvoie l'annotation de cette classe pour MyAnnotation1
9. method.isAnnotationPresent(MyAnnotation2.class) dans TestAnnotation
Déterminer si la méthode utilise l'annotation de MyAnnotation2