Maison  >  Article  >  Java  >  Comment puis-je accéder aux valeurs d’annotation dans une classe différente en Java ?

Comment puis-je accéder aux valeurs d’annotation dans une classe différente en Java ?

Mary-Kate Olsen
Mary-Kate Olsenoriginal
2024-10-26 21:34:03114parcourir

How Can I Access Annotation Values in a Different Class in Java?

Accès aux valeurs d'annotation en Java

Les annotations sont un mécanisme puissant en Java pour ajouter des métadonnées aux classes, méthodes et champs. Ces annotations sont accessibles et utilisées au moment de l'exécution pour modifier le comportement du code annoté. Une question courante qui se pose est de savoir s'il est possible de lire la valeur d'une annotation dans une classe différente.

La réponse à cette question est oui, mais cela dépend de la politique de rétention de l'annotation. Les annotations peuvent avoir l'une des trois politiques de conservation suivantes :

  • SOURCE : Les annotations sont supprimées par le compilateur et ne sont pas disponibles au moment de l'exécution.
  • CLASS : Les annotations sont conservées dans le fichier de classe mais ne sont pas disponibles au moment de l'exécution via la réflexion.
  • RUNTIME : Les annotations sont conservées dans le fichier de classe et sont disponibles au moment de l'exécution via la réflexion.

Pour lire la valeur d'une annotation dans une classe différente, l'annotation doit avoir une politique de rétention d'exécution. Pour spécifier une politique de rétention d'exécution, utilisez l'annotation @Retention suivie de l'énumération RetentionPolicy :

@Retention(RetentionPolicy.RUNTIME)
@interface Column {
    String columnName();
}

Une fois que l'annotation a une politique de rétention d'exécution, vous pouvez utiliser la réflexion pour accéder à ses valeurs dans une autre classe :

for (Field f : MyClass.class.getFields()) {
    Column column = f.getAnnotation(Column.class);
    if (column != null) {
        System.out.println(column.columnName());
    }
}

Notez que pour accéder aux champs privés, vous devez utiliser la méthode getDeclaredFields() au lieu de getFields() :

for (Field f : MyClass.class.getDeclaredFields()) {
    Column column = f.getAnnotation(Column.class);
    if (column != null) {
        System.out.println(column.columnName());
    }
}

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn