当前位置: 首页 > 知识库问答 >
问题:

错误:“属性值必须是常量”。我可以在编译时从枚举中构造常量吗?

闾丘冠玉
2023-03-14

下面的代码运行良好,其中PROCESS_UPDATES是一个常量。

    public static final String PROCESS_UPDATES = "ProcessUpdates";
    public static final String PROCESS_UPDATES = "ProcessSnapshots";
    // etc....

    @Produce(uri = "seda:" + MyClass.PROCESS_UPDATES)
    protected ProducerTemplate processUpdatesTemplate;

然而,为了避免到处出现10亿个常量字符串,我尝试了一种枚举设计模式。

    public enum Route { ProcessUpdates, ProcessSnapshots }

在大多数情况下,我可以编写“seda:”路线。处理快照,看起来更整洁。

然而,我信任的测试代码现在失败了,因为注释中的uri必须是常量。

    @Produce(uri = "seda:" + MyClass.Route.ProcessUpdates)    // compiler error
    protected ProducerTemplate processUpdatesTemplate;

错误:属性值必须是常量

问题是,路线。处理更新。toString()有点像是一个常量,但编译器不这么认为。

我读了一篇关于常量和注释的文章,但没有看到任何答案。

那么,在java中,有没有一种在编译时从枚举构造常量字符串的好方法呢?

谢谢你的建议。维京斯坦

共有1个答案

袁宜民
2023-03-14

我没有找到解决办法

据我所知,这是不可能的。

我需要使用字符串常量<代码>公共静态最终字符串XYZ=“XYZ” -等等。

 类似资料:
  • 我在我的Android Studio2.0Preview5和gradle插件1.5.0的项目中遇到以下错误。即使是clean project也会抛出同样的错误。 eTaskArtifacts.bin.gradle/2.11/TaskArtifacts/TaskArtifacts.bin).>r错误:无法从缓存TaskArtifacts.bin(/project_path/.gradle/2.10/

  • 问题内容: Python 3.4引入了一个新模块,该模块向该语言添加了枚举类型。的文档提供了一个示例来演示如何扩展它: 此示例还演示了一个问题:在property方法中,定义了一个常量,该常量通常在类级别定义- 但是尝试在a级别内执行此操作只会将其添加为枚举的成员之一,因此,在方法内部定义。 如果该类想在其他方法中使用此常量,则也必须在其中定义它,这显然不是理想的选择。 有什么方法可以在中定义类常

  • 错误:枚举开关大小写标签必须是枚举常量的非限定名称错误:大小写标签重复 不要编译,帮帮我!

  • 问题内容: 我无法使用从常量中获取的枚举作为注释中的参数。我收到此编译错误:“注释属性[attribute]的值必须是枚举常量表达式”。 这是枚举代码的简化版本: 对于注释: 和班级: 该错误仅在方法B的“ theEnum = MYENUM_CONSTANT”中显示。字符串和int常量对于编译器是可以的,但Enum常量不是,即使它的值与methodA上的值完全相同。在我看来,这是编译器中缺少的功能

  • 问题内容: 这是来自有效的Java 使用int枚举模式的程序很脆弱。因为int枚举是编译时常量,所以它们被编译到使用它们的客户端中。 有人可以解释为什么int枚举模式被称为编译类型常量,以及将其 编译到客户端 意味着什么吗? 这是一个这样的常量的例子: 问题答案: 假设您有两个文件: 都编译它们,运行,它将打印出1。 现在将Foo.java更改为2,然后重新编译 Foo.java 。重新运行,它将

  • 这里Java初学者, 我试图用Spring定义我的模型来访问Mongodb数据库中的数据。 我想将性别定义为一个枚举,在数据库中,值存储为字符串:或 但我得到以下错误: 这是我的图POJO: 这是我的性别枚举: 这就是我尝试访问它的方式: @Override public void run(String…args)抛出异常{Optional chronos=figureposition.findB