Je travaillais et j'ai réalisé que je ne comprenais pas les annotations. Je comprends que @Override, @Duplicate, @Test sont donnés, mais je ne sais pas comment cela fonctionne, alors j'ai cherché.
Ce qui suit est de wikipedia.
Les annotations Java sont une fonction permettant de saisir des informations supplémentaires sous forme de métadonnées pour les classes, les méthodes et les packages, et ont été ajoutées dans Java SE 5. Vous pouvez également créer vos propres annotations en implémentant l'interface java.lang.annotation.Annotation.
Les types d'annotations sont classés dans les trois types suivants.
--Marker Annotation - Une annotation sans données et seulement un nom. Exemple: @Override, @Duplicate --Annotation à valeur unique - Une annotation qui n'a qu'une seule donnée. Cela ressemble à un appel de méthode. Exemple: @SuppressWarnings --Annotation complète - Une annotation avec plusieurs données.
Info.java
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.METHOD)
public @interface Info {
String value();
}
Pour définir la classe d'annotations, ajoutez les annotations suivantes.
java.lang.annotation.RetentionPolicy
.CLASS
: Enregistré dans le fichier de classe au moment de la compilation. Non chargé dans la machine virtuelle au moment de l'exécution.
RUNTIME
: chargé dans la machine virtuelle au moment de l'exécution
SOURCE
: Supprimer au moment de la compilation
java.lang.annotation.ElementType
.ʻANNOTATION_TYPE: Applicable aux annotations
CONSTRUCTOR: Applicable aux constructeurs
FIELD: Applicable aux champs
LOCAL_VARIABLE: Applicable localement «METHOD»: Applicable aux méthodes
PACKAGE: Applicable aux colis
PARAMETER`: Applicable aux arguments
Cette fois, je souhaite créer un processus pour obtenir la valeur de l'annotation lors de l'exécution de la méthode.
Spécifiez @Retention comme RUNTIME
et @Target comme METHOD
.
Ce sera la classe à appeler. Ajoutez l'annotation Info créée à la méthode.
AnnotationInstance.java
public class AnnotationInstance {
@Info("hoge")
public void execute() {
System.out.println("Hello World!!");
}
}
@Info("hoge")
La valeur est définie dans l'annotation @Info.
hoge est mis en valeur.
Ce sera la classe principale appelante.
AnnotationMain.java
import java.lang.reflect.Method;
public class AnnotationMain {
public static void main(String[] args) {
try {
Class<?> clazz = Class.forName("AnnotationInstance");
Method method1 = clazz.getMethod("execute", new Class<?>[] {});
Info info1 = method1.getAnnotation(Info.class);
System.out.println(info1.value());
} catch (ClassNotFoundException | NoSuchMethodException | SecurityException e) {
e.printStackTrace();
}
}
}
Obtenez la méthode par réflexion, puis obtenez la classe d'annotation.
L'exécution de la classe ʻAnnotationMain.java` créée ci-dessus produira le résultat suivant.
hoge
Il a été confirmé que la valeur de l'annotation @Info spécifiée dans la méthode ʻexecute () de ʻAnnotationInstance
a été acquise.
C'était étonnamment facile à utiliser. Au cours de la rédaction de cet article, j'ai revisité certaines implémentations de classes d'annotations. Je n'y touche généralement pas, mais il est probablement utilisé car il s'agit d'un développement de framework et de package. Je n'ai pas pu le lire jusqu'à présent, alors je vais le lire sans me sentir faible à l'avenir. J'ai également touché le reflet pour la première fois depuis longtemps. Je ne comprends pas grand-chose non plus, alors je vais regarder de plus près.
Annotations-Wikipedia https://ja.wikipedia.org/wiki/%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3#Java%E3%81%AB%E3%81%8A%E3%81%91%E3%82%8B%E3%82%A2%E3%83%8E%E3%83%86%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3 Une petite annotation Java spéciale-Qiita https://qiita.com/kashira2339/items/6450714e42c37b441514 Exemple pour créer votre propre annotation et obtenir la valeur | ITSakura https://itsakura.com/java-annotation-make
Recommended Posts