Maison > Java > javaDidacticiel > le corps du texte

Les annotations Java peuvent-elles accepter des valeurs générées dynamiquement lors de l'exécution ?

DDD
Libérer: 2024-10-28 14:42:30
original
478 Les gens l'ont consulté

 Can Java Annotations Accept Dynamically Generated Values at Runtime?

Évaluation des annotations au moment de l'exécution

En Java, les annotations sont utiles pour fournir des métadonnées à un compilateur ou à un système d'exécution. Cependant, une question récurrente est de savoir si les annotations peuvent accepter des valeurs générées dynamiquement au moment de l'exécution.

La tentative ci-dessous tente de générer une valeur de chaîne pour l'attribut aString de @MyInterface :

<code class="java">@MyInterface(aString = MyClass.GENERIC_GENERATED_NAME)
public class MyClass {

    static final String GENERIC_GENERATED_NAME = MyClass.generateName(MyClass.class);

    public static final String generateName(final Class<?> c) {
        return c.getClass().getName();
    }
}</code>
Copier après la connexion

Cependant, le compilateur le rejettera avec le message d'erreur :

The value for annotation attribute MyInterface.aString must be a constant expression
Copier après la connexion

Cela est dû au fait que les annotations sont évaluées au moment de la compilation, mais GENERIC_GENERATED_NAME n'est pas connu avant l'exécution.

Pour obtenir l'effet souhaité, il serait nécessaire de créer un processeur d'annotations capable d'évaluer la méthode generateName au moment de la compilation. Cependant, cette solution présente des limites, car Java ne prend pas en charge l'évaluation dynamique du code au moment de l'exécution.

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!

source:php.cn
Déclaration de ce site Web
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
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal