Java 字符串开关大小写标签的编译器错误
我有一个枚举常量的开关大小写标签。我的枚举和案例标签示例如下所示:Java 字符串开关大小写标签的编译器错误,java,string,enums,switch-statement,Java,String,Enums,Switch Statement,我有一个枚举常量的开关大小写标签。我的枚举和案例标签示例如下所示: private Enum PreferenceType { FIRST,SECOND,THIRD; private String prefKey; PreferenceType(String prefKey) { this.prefKey = prefKey; } @Override public String toString() { return prefKe
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():”当我将鼠标悬停在case标签上时,错误显示“case表达式必须是常量表达式”。我的jdk版本是1.7,我的eclipse版本是3.7.2。有人能告诉我如何解决这个问题吗?您可以对枚举进行
切换
,但不能对字符串进行切换
尝试:
你的案件陈述会是
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,然后可以在开关中使用它。错误消息说明了这一切--大小写表达式必须是常量表达式
您使用的是toString()方法的返回值,就编译器而言,它不是常量。搜索错误消息的可能重复;这不是新的编译器错误,您也不是第一个遇到此错误的人。另请参见,我的问题与此不同。我想知道为什么即使Eclipse3.7.2支持Java7特性,case标签也会抛出错误。此外,已经提到的答案与我的代码人员无关,因此请停止将其标记为副本。在这个问题上我已经筋疲力尽了,请有人帮我解决一下。在你的枚举中,构造函数接受一个参数,但是你的枚举定义(第一、第二、第三)没有提供参数。你能把真实的密码贴出来吗?那不行。还有其他解决办法吗?尽管如此,我还是非常感谢您在交换机中使用prefKey。当我对上面提到的每个case标签使用break语句时,Eclipse说这是一个无法访问的代码。这背后的原因是什么?我有一个return语句,然后在开始下一个case标签(如case PreferenceType)之前有一个break语句;打破return语句将强制执行中断方法-因此无法访问break语句。您不需要在return语句之后直接使用break语句,当我对上面提到的每个case标签使用break语句时,Eclipse说这是一个无法访问的代码。这背后的原因是什么?我有一个return语句,然后在开始下一个case标签(如case PreferenceType)之前有一个break语句;打破它已经说明了原因——因为它是无法访问的代码。您已经使用return语句从方法返回,之后编写的任何其他内容都是不可访问的。只需去除断裂。
case PreferenceType.FIRST:
//do something;
break;
case PreferenceType.SECOND:
//do something;
break;
case PreferenceType.THIRD:
//do something;
break;