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;
答案 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
。