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

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

DDD
DDDoriginal
2024-10-28 14:42:30406parcourir

 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>

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

The value for annotation attribute MyInterface.aString must be a constant expression

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!

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