我有一个枚举常量的开关案例标签。我的枚举和案例标签示例如下:
private Enum PreferenceType {
FIRST,SECOND,THIRD;
private String prefKey;
PreferenceType(String prefKey) {
this.prefKey = prefKey;
}
@Override
public String toString() {
return prefKey;
}
}
private String getPreference() {
switch(getMessage())
{
case PreferenceType.FIRST.toString():
//do something;
break;
case PreferenceType.SECOND.toString():
//do something;
break;
case PreferenceType.THIRD.toString():
//do something;
break;
default: break;
}
}
整个案例标签声明由eclipse标记为红线 “case PreferenceType.FIRST.toString():”当我将鼠标悬停在案例标签上时,错误显示“案例表达式必须是常量表达式”。我的jdk版本是1.7,而我的eclipse版本是3.7.2。有人可以告诉我如何解决这个问题?
答案 0 :(得分:1)
您可以在枚举上switch
,但在字符串上不能switch
。
尝试:
private Enum PreferenceType {
FIRST("key1"),SECOND("key2"),THIRD("key3");
static Map<String, PreferenceType> prefMap = new HashMap<String, PreferenceType>();
private String prefKey;
PreferenceType(String prefKey) {
this.prefKey = prefKey;
prefMap.put(prefKey, this);
}
@Override
public String toString() {
return prefKey;
}
public static PreferenceType getPreferenceTypeFor(final String key) {
return prefMap.get(key);
}
}
并且开关应该是......
switch(PreferenceType.getPreferenceTypeFor(getMessage()))
并且您的案例陈述将是......
case PreferenceType.FIRST:
//do something;
break;
case PreferenceType.SECOND:
//do something;
break;
case PreferenceType.THIRD:
//do something;
break;
现在,当您调用PreferenceType.getPreferenceTypeFor(“key1”)时,您将获得PreferenceType.FIRST,然后可以在切换中使用它。
答案 1 :(得分:1)
错误消息说明了一切 - 案例表达式必须是常量表达式
您正在使用toString()方法的返回值,就编译器而言,该方法不是常量。