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

在需要字符串的批注中使用的枚举值

华永逸
2023-03-14

假设我有一个简单的注释:

 @MyAnnotation(value=<SomeString>)

和枚举:

 enum Days {
      MONDAY...
 }

我不能这样使用这个注释:

 @MyAnnotation(value=Days.MONDAY.name())
 private class SomeClass {
       //some code
 }

如果说“它必须是一个编译过的时间常数”,这段代码就会失败。我确实理解为什么会发生这种情况,而且我知道JSL中关于编译时间常数的部分。

我的问题是,为什么不按照规范将枚举作为编译时间常数,原因是什么。你不能更改枚举名。。。

库马尔编辑

private static final class Test {

    public static final String complete = "start" + "finish";

}

共有1个答案

龙哲
2023-03-14
Method dispatching cannot be computed to a compile time constant

对于上面的例子,我举了一个例子,因为switch语句中的case也需要编译时常量

public class Joshua{

    public final String complete = "start" + "finish";


    public void check(String argument) {


        switch(argument)
        {
         case complete: //This compiles properly
        }

        switch(argument)
        {
         case name(): //This doesn't compile
        }
    }

    public final String name(){

        return complete;
    }

}

对于最终变量,您知道它是一个编译时间常量,但方法可以自由返回任何内容(最终方法根本不能被覆盖)

 类似资料:
  • 问题内容: 我很清楚Java中枚举的高级用法。对我来说,许多区别于普通班和告诉他们需要的观点也很清楚。 谁能举一些带有高级枚举示例代码的实际示例?可以清楚地阐述一下 我们应该避免使用类,而应该使用枚举 。 请不要混淆。我不是在问如何使用枚举或枚举的用途是什么。关于此有很多问题和答案。我正在寻找一些实时/实时/实际的例子,我们应该避免任何其他数据类型或类。 问题答案: 试试这个例子: 用法:

  • 问题内容: 我定义了以下枚举 现在的印刷价值是 相反,我想打印枚举的值 要实现此功能可以做些什么? 问题答案: 您正在打印枚举 对象 。如果只想打印该属性,请使用该属性: 请参阅 对枚举成员及其属性 的 编程访问权限 部分 : 如果您有枚举成员并需要其名称或值: 如果只需要提供自定义字符串表示形式,则可以向枚举添加方法: 演示:

  • 因此,进一步寻找,我发现这个人有一个解决方案:typescript中基于字符串的枚举的解决方案 这将允许像这样的东西工作: 唯一的回应基本上是说这样做是不安全的。(但我应该说,它确实起作用了--我可以键入eventtype.dot...Atom editor给了我5个大小写选项可供选择(保持代码中的内容一致),然后我可以使用它将字符串值吐出来,给我的用户一个很好的填充空间的体验,将来我可以更改枚举

  • 问题内容: 我想使用注解针对一组值验证字符串。 我想要的基本上是这样的: 要么 我还想根据在中设置的值对其他变量进行一些验证: 我想不出一种通过自定义批注实现此目的的方法。 有人请帮助我。 问题答案: 这就是我所做的。 注解 验证类别 我用它像 现在,我需要弄清楚如何执行条件检查。如果为String,则maxValue和minValue应该为null或零。 有任何想法吗?

  • 在尝试获取allowableValues标记的枚举值时,我遇到了以下错误。 批注属性apimodelProperty.AllowAbleValues的值必须是常量表达式 我想做的是: 我有可能做我想做的事吗?我知道在我的API中只公开枚举是可能的,然后swagger会自动识别允许的值,但是需要将有问题的字段公开为字符串,即使我们的内部逻辑将其作为枚举。 提前感谢您的帮助!

  • 例如,我如何做类似的事情: 结果示例: