繁体   English   中英

在注释中使用的枚举值,其中包含字符串

[英]enum value used in annotation where a string is expected

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

 @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";

}
Method dispatching cannot be computed to a compile time constant

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

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;
    }

}

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM