Blo*_*oke 14 java enums case tostring switch-statement
为什么在交换机情况下不能将枚举值用作字符串?(或者这有什么问题:)
String argument;
switch (argument) {
case MyEnum.VALUE1.toString(): // Isn't this equal to "VALUE1" ?
// something
break;
case MyEnum.VALUE2.toString():
// something else
break;
Run Code Online (Sandbox Code Playgroud)
Pet*_*rey 33
您只能使用编译时已知的字符串.编译器无法确定该表达式的结果.
也许你可以试试
String argument = ...
switch(MyEnum.valueOf(argument)) {
case VALUE1:
case VALUE2:
Run Code Online (Sandbox Code Playgroud)
case MyEnum.VALUE1.toString()://这不等于"VALUE1"吗?
不,不一定:您可以自由提供自己的实施 toString()
public enum MyType {
VALUE1 {
public String toString() {
return "this is my value one";
}
},
VALUE2 {
public String toString() {
return "this is my value two";
}
}
Run Code Online (Sandbox Code Playgroud)
}
此外,维护代码的人可以在您离开公司后添加此实现.这就是为什么你不应该依赖于字符串值,并坚持使用的数值(如由常量表示MyEnum.VALUE1,MyEnum.VALUE2你的,等等)enum!而非.