java - 为什么注释属性的值应该是常量表达式?

标签 java annotations

我有以下代码

 @UIUnitTimeout(8*60*1000) // works
 @UIUnitTimeout(TimeUnit.MINUTES.toMillis(8)) // does not work

我知道根据 JLS,只允许常量表达式作为注释属性的值。但为什么?为什么数据类型匹配还不够?如果要在运行时评估表达式,是否有任何可能出错的地方?每个规范背后都有逻辑推理吗?

最佳答案

注解就像类型扩展或关于类型的元数据。

因为 java 是一种静态类型语言(意味着类型在编译时已知),注解属性数据(元数据)在编译时也是已知的似乎是合理的 - 您正在定义/声明关于注解(扩展名)的数据).

作为一个纯粹的实用点,annotation processing ,这是一个编译时(可选)步骤,属性数据必须在编译时已知 - 您尚未达到运行时环境,但您需要属性数据。

关于java - 为什么注释属性的值应该是常量表达式?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14931143/

相关文章:

java - 生产者消费者场景,停止从队列中读取直到执行完成

java - 使用 Spring 的 @Value 注释插入时如何避免截断零前导数字?

iphone - MapKit 注释和用户位置

spring - 使用 ControllerClassNameHandlerMapping 发现模糊映射

java - 如何读取类中字段的运行时注释

java - Eclipse 中的错误标记未显示

java - 如何使用 Oauth 2 从 Gmail 帐户导入 Gmail 联系人

java - 检索 jsoup 中元素的文本

java - 一名测试观察员报告 JUnit Suite 中各个测试的结果

java - 将字符串 ["string"] 转换为字符串数组