Comment créer votre propre annotation en Java et obtenir la valeur

Je vais présenter un exemple de programme qui crée une annotation personnalisée en Java et acquiert la valeur de l'annotation.

environnement

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:\>

1. Créez votre propre annotation

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

2. Annotez la classe

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.

3. Obtenez l'annotation et faites-y référence

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

référence

Lesson: Annotations (The Java™ Tutorials < Learning the Java Language)


c'est tout

Recommended Posts

Comment créer votre propre annotation en Java et obtenir la valeur
Comment obtenir la date avec Java
[Java] Comment obtenir la clé et la valeur stockées dans Map par traitement itératif
[Java] Comment obtenir la valeur maximale de HashMap
Comment obtenir le nom d'une classe / méthode exécutée en Java
[Forge] Comment enregistrer votre propre Entité et Entité Render dans 1.13.2
[Java] Comment obtenir le répertoire actuel
[Java] Comment convertir du type String en type Path et obtenir le chemin
Comment incrémenter la valeur de Map sur une ligne en Java
Comment obtenir une classe depuis Element en Java
Comment obtenir et étudier Java SE8 Gold
Comment obtenir la valeur du paramètre (valeur de la propriété) à partir de la base de données dans Spring Framework
Comment obtenir le chemin absolu d'un répertoire s'exécutant en Java
[Java] Comment obtenir l'URL redirigée finale
Je veux obtenir la valeur en Ruby
Créez vos propres raccourcis avec Xcode pour éliminer les travaux d'installation compliqués des pods
Réflexion: Comment utiliser une interface fonctionnelle pour vos propres fonctions (java)
Comment créer un environnement Java en seulement 3 secondes
[Java] Comment omettre le constructeur privé dans Lombok
Source utilisée pour obtenir l'URL de la source de redirection en Java
Comment créer un URI de données (base64) en Java
Classes et instances Java comprises dans la figure
Créez vos propres annotations Java
Comment obtenir le nom de classe de l'argument de LoggerFactory.getLogger lors de l'utilisation de SLF4J en Java
Branchement conditionnel Java: comment créer et étudier des instructions de commutation
Différence entre Java et JavaScript (comment trouver la moyenne)
Comment créer une partie d'espace réservé à utiliser dans la clause IN
Comment récupérer la valeur de hachage dans un tableau dans Ruby
Comment appeler et utiliser l'API en Java (Spring Boot)
Créez votre propre serveur simple avec Java et comprenez HTTP
Comment développer et enregistrer une application Sota en Java
Comment dériver le dernier jour du mois en Java
Différences dans la gestion des chaînes entre Java et Perl
Comment changer Java à l'ère d'OpenJDK sur Mac
Comment utiliser HttpClient de Java (Get)
Comment apprendre JAVA en 7 jours
Comment obtenir des paramètres dans Spark
Comment écrire des commentaires dans le fichier de définition de schéma dans GraphQL Java et les refléter dans GraphiQL et GraphQL Playground
Gérez vos propres annotations en Java
Filtrez la liste facultative Java n ° 2 utile en entreprise et obtenez la première valeur
Comment résoudre le problème lorsque la valeur n'est pas envoyée lorsque le formulaire est désactivé dans les rails et envoyé
Comment utiliser les classes en Java?
Comment concaténer des chaînes avec Java
[Rails] Comment obtenir l'URL de la source de transition et la rediriger
[Swift5] Comment obtenir un tableau et un ensemble de différences entre les tableaux
Comment créer un nouveau projet Gradle + Java + Jar dans Intellij 2016.03
Comment afficher la valeur lorsqu'il y a un tableau dans le tableau
Comment obtenir l'identifiant de la clé PRIMAY incrémentée automatiquement dans MyBatis
Comment installer le langage utilisé dans Ubuntu et comment créer l'environnement
Comment obtenir la valeur de boolean avec jQuery sous forme simple de rails
Comment obtenir et ajouter des données depuis Firebase Firestore dans Ruby
Comment résoudre l'erreur inconnue apparue lors de l'utilisation de slf4j en Java
Comment installer confortablement JDK 11 dans votre Mac