J'ai fait une annotation en Java.

introduction

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é.

environnement

Qu'est-ce qu'une annotation en Java?

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.

Types d'annotations en Java

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.

Rendez-le plus familier que d'apprendre

Créer une classe d'annotation

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.

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

ʻ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.

Créer une classe d'annotation et une classe d'appel

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.

J'essaierai de courir

L'exécution de la classe ʻAnnotationMain.java` créée ci-dessus produira le résultat suivant.

Résultat d'exécution
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.

à la fin

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.

Site référencé

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

J'ai fait une annotation en Java.
J'ai fait une roulette à Java.
J'ai envoyé un e-mail en Java
J'ai créé un programme de jugement des nombres premiers en Java
Je souhaite envoyer un e-mail en Java.
J'ai créé un jeu Janken en Java (CLI)
J'ai essayé la métaprogrammation avec Java
J'ai écrit sur Java downcast d'une manière facile à comprendre
J'ai essayé d'utiliser l'instruction Extended for en Java
[Java] Annotation
J'ai fait un interpréteur (compilateur?) Avec environ 80 lignes en Ruby.
J'ai créé un PDF avec Java.
J'ai créé une application shopify @java
[Débutant] J'ai créé un programme pour vendre des gâteaux en Java
Lire CSV en Java (annotation Super CSV)
[Java] Annotation
Essayez une expression If en Java
J'ai écrit le théorème de Gordobach en java
J'ai essayé d'utiliser JWT en Java
Jeu de devinettes d'âge réalisé avec Java
Distributeur automatique d'échantillons fabriqué avec Java
Exécuter des applications écrites en Java8 en Java6
Exécuter un processus externe en Java
J'ai fait un "Sunshine Ikezaki game" que j'ai vu sur Twitter en Java.
J'ai créé un serveur écologique avec scala
Échantillon de distributeur automatique fabriqué avec Java (classification)
J'ai fait l'étalonnage de la caméra OpenCV en Java
J'ai créé un nouvel outil de déploiement Java
[* Java *] J'ai participé au JJUG CCC 2019 Spring
J'ai créé StringUtils.isBlank
Changements dans Java 11
Janken à Java
Je veux ForEach un tableau avec une expression Lambda en Java
Taux circonférentiel à Java
FizzBuzz en Java
Outil GUI refactorisé réalisé avec Java8 + JavaFX en 2016
J'ai créé une application par moi-même! (Application de gestion de la lecture)
Deuxième décoction: essayez une expression If en Java
J'ai créé une application Android pour le service MiRm
J'ai écrit un programme de jugement des nombres premiers en Java
J'ai créé une bibliothèque d'extension Ruby en C
rsync4j --Je veux toucher rsync en Java.
Ce que j'ai appris en Java (partie 2) Que sont les variables?
Comment résoudre les problèmes d'expression en Java
J'ai essayé de développer une application en 2 langues
J'ai essayé de créer une compétence Alexa avec Java
J'ai écrit un programme de factorisation prime en Java
Lire JSON en Java
Faites un blackjack avec Java
Programmation par contraintes en Java
Mettez java8 dans centos7
Je veux faire quelque chose comme "cls" en Java
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
J'ai essayé d'implémenter la notification push Firebase en Java