在 Java 中,注释对于向编译器或运行时系统提供元数据非常有用。然而,一个持续存在的问题是注释是否可以接受在运行时动态生成的值。
下面的尝试尝试为 @MyInterface 的 aString 属性生成字符串值:
<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>
但是,编译器将拒绝此操作并显示错误消息:
The value for annotation attribute MyInterface.aString must be a constant expression
这是因为注释是在编译时评估的,但直到运行时才知道 GENERIC_GENERATED_NAME。
为了达到预期的效果,它有必要创建一个可以在编译时评估generateName方法的注释处理器。然而,这个解决方案有局限性,因为 Java 不支持在运行时动态评估代码。
以上是Java 注解可以在运行时接受动态生成的值吗?的详细内容。更多信息请关注PHP中文网其他相关文章!