当前位置: 首页 > 面试题库 >

摆脱“注释属性的值必须是一个常量表达式”消息

柯曦
2023-03-14
问题内容

我在代码中使用注释,并且尝试使用在运行时确定的值。

我将列表定义为static final(lst),并将一些元素添加到此列表中。

使用时lst.get(i),出现编译错误:

The value for annotation attribute must be a constant expression

这个问题有什么解决方案?


问题答案:

注释的值必须是一个编译时间常数,因此没有简单的方法可以完成您想做的事情。

另请参见此处:如何通过Constantjava为注释提供值

如果在尝试运行程序之前知道该值,则可以使用一些编译时工具(ant,maven?)进行配置。



 类似资料:
  • 问题内容: Eclipse不断给我错误: 但是我绝对可以给注解一个常量。 如果我将其更改为 很高兴,但我不必这样做。有谁知道为什么我的MIN_YEAR常量使用评估表达式而不是纯数字声明时不被视为常量? 问题答案: 表达方式 将仅在运行时确定,但是 是在编译时确定的,因此允许使用,因为注释中的值应在编译时而不是运行时解析。

  • 问题内容: 我在switch / case语句中遇到问题。该错误显示:“ case表达式必须是常量表达式”。我理解该错误,可以使用If来解决它,但是有人可以告诉我为什么case表达式在switch / case中必须是常量。我的错误的代码示例: 谢谢你的解释!! 问题答案: 因此可以在编译阶段进行评估(静态检查) 请参阅:http://docs.oracle.com/javase/specs/jl

  • 问题内容: 我有以下代码 我知道根据JLS,只允许将常量表达式作为批注属性的值。但为什么?如果数据类型匹配,为什么还不够?如果要在运行时对表达式进行求值,是否有可能出错?每个规范背后都有逻辑推理吗? 问题答案: 注释就像类型扩展或有关该类型的元数据。 因为Java是一种静态类型的语言(意味着类型在编译时是已知的),所以在编译时也知道注释属性数据(元数据)似乎是合理的- 您正在定义/声明有关注释(扩

  • 问题内容: 我的转换案例声明昨天运行良好。但是,当我今天早些时候运行代码时,eclipse给我一个错误,强调了红色的case语句,并说:case表达式必须是常量表达式,它是常量,我不知道发生了什么。这是我的代码如下: 所有R.id.int都用红色下划线。 问题答案: 在常规的Android项目中,资源R类中的常量声明如下: 但是,从ADT 14开始,在图书馆项目中,它们将这样声明: 换句话说,常数

  • 问题内容: 我是React的新手,我想知道这里的标准是什么。 想象一下,我有一个像这样的反应路由器: 现在我想删除如果设置为的两条路线,因此一种理智的做法如下所示: 但是有两条路线,React返回错误: 表达式必须具有一个父元素。 我不想在这里使用多个ifs。React首选的处理方式是什么? 问题答案: 将它们放在一个数组中(也分配键): 使用最新的React版本,您也可以这样尝试 :

  • 刚开始用Android开发,尝试用房库。从昨天开始,我就面对这个警告信息 w: [kapt]请求增量注释处理,但由于以下处理器不是增量的,因此支持被禁用:androidx.lifecycle。生命周期处理器(非增量),androidx.room。房间处理器(非增量)。 我尝试过研究和修复,但无法避免这个错误。构建文件。请就我做错了什么提出建议。