Java switch语句中带构造函数的枚举
这可能是一个愚蠢的问题,但我不明白为什么它不起作用:Java switch语句中带构造函数的枚举,java,enums,core,Java,Enums,Core,这可能是一个愚蠢的问题,但我不明白为什么它不起作用: public class MainClass { public enum Header{ ValueType("Value Type"), LimitType("Limit Type"), Currency("Currency"); Header(String value) { this.value = value; }
public class MainClass {
public enum Header{
ValueType("Value Type"),
LimitType("Limit Type"),
Currency("Currency");
Header(String value) {
this.value = value;
}
private final String value;
public String getValue(){
return value;
}
}
static void getHeaderValue (String headerValue) {
switch (headerValue) {
case Header.LimitType.getValue() :
System.out.println(Header.LimitType.getValue());
break;
case Header.ValueType.getValue() :
System.out.println(Header.ValueType.getValue());
break;
case Header.Currency.getValue() :
System.out.println(Header.Currency.getValue());
break;
default:
break;
}
}
}
编译器注意到“需要常量字符串表达式”。提前感谢您的解释。与您的枚举无关,但与您的switch语句有关,switch语句在其case子句中需要常量case需要常量表达式,如
“helloWorld”
,表达式头.LimitType.getValue()
可能会返回一个永远不会更改的值,但它不是编译器的常量表达式。这里的构造函数应该是私有的。谢谢!那么,如果我需要在switch/case中使用硬编码字符串,枚举不是吗?唯一的解决方法是使用最终字符串字段吗?@aime如果getValue()
是永远不会改变的东西,您可以使用枚举本身而不是字符串,比如case Header.LimitType:
,case Header.ValueType:
,etcI得到了。非常感谢。