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!