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

注释属性Min.value的值必须是一个常量表达式

充煌
2023-03-14
问题内容

Eclipse不断给我错误:

The value for annotation attribute Min.value must be a constant expression

但是我绝对可以给注解一个常量。

private static final int MIN_YEAR = Calendar.getInstance().get(Calendar.YEAR) - 1;

@Min(MIN_YEAR)

如果我将其更改为

private static final int MIN_YEAR = 2013;

很高兴,但我不必这样做。有谁知道为什么我的MIN_YEAR常量使用评估表达式而不是纯数字声明时不被视为常量?


问题答案:

表达方式

private static final int MIN_YEAR = Calendar.getInstance().get(Calendar.YEAR) - 1;

将仅在运行时确定,但是

private static final int MIN_YEAR = 2013;

是在编译时确定的,因此允许使用,因为注释中的值应在编译时而不是运行时解析。



 类似资料:
  • 问题内容: 我在代码中使用注释,并且尝试使用在运行时确定的值。 我将列表定义为(lst),并将一些元素添加到此列表中。 使用时,出现编译错误: 这个问题有什么解决方案? 问题答案: 注释的值必须是一个编译时间常数,因此没有简单的方法可以完成您想做的事情。 另请参见此处:如何通过Constantjava为注释提供值 如果在尝试运行程序之前知道该值,则可以使用一些编译时工具(ant,maven?)进行

  • 问题内容: 我在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开始,在图书馆项目中,它们将这样声明: 换句话说,常数

  • 下面的代码运行良好,其中PROCESS_UPDATES是一个常量。 然而,为了避免到处出现10亿个常量字符串,我尝试了一种枚举设计模式。 在大多数情况下,我可以编写,看起来更整洁。 然而,我信任的测试代码现在失败了,因为注释中的uri必须是常量。 错误:。 问题是,有点像是一个常量,但编译器不这么认为。 我读了一篇关于常量和注释的文章,但没有看到任何答案。 那么,在java中,有没有一种在编译时从

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