为什么public static final string不能用在java开关中

时间:2017-07-26 02:12:51

标签: java

java支持切换一个字符串,但在case字段中,如何使用常量字符串? 像这样:

PhxLog l = new PhxLog();        
for (String s : l.FIELDS) {
        Object v = mapBaseData.getData().get(s);
            switch (s) {
                case l.LOG_FIELD_TIME:   // this is wrong, but how to use a constant instead of a "xxxx"
                    l.setTime((String)v);
                    break;

2 个答案:

答案 0 :(得分:2)

(信用转到EJP的回答)

JLS开始,它提到你放入的表达式需要是一个常量表达式。

有不同形式的常量表达式,字符串包含在列表中:

  

TypeName表单的限定名称(第6.5.6.2节)。标识符   参考常数变量(§4.12.4)。

从您的代码中,它提示l.LOG_FIELD_TIME不符合要求,因为l不是TypeName(由for (String s : l) {暗示)。如果LOG_FIELD_TIME真的是static final字段,则应该使用ClassNameOfL.LOG_FIELD_TIME代替,并且事情应该有效。

答案 1 :(得分:-2)

  

如何使用常量而不是“xxxx”

你做不到。 JLS 14.11

  

每个case标签都有一个case常量,它是一个常量表达式或枚举常量的名称。

static final String的名称不是常量表达式。

你可以使用enum