为什么不能在 switch case 中使用枚举值作为字符串?(或者这有什么问题:)
String argument;
switch (argument) {
case MyEnum.VALUE1.toString(): // Isn't this equal to "VALUE1" ?
// something
break;
case MyEnum.VALUE2.toString():
// something else
break;
为什么不能在 switch case 中使用枚举值作为字符串?(或者这有什么问题:)
String argument;
switch (argument) {
case MyEnum.VALUE1.toString(): // Isn't this equal to "VALUE1" ?
// something
break;
case MyEnum.VALUE2.toString():
// something else
break;
您只能使用在编译时已知的字符串。编译器无法确定该表达式的结果。
也许你可以试试
String argument = ...
switch(MyEnum.valueOf(argument)) {
case VALUE1:
case VALUE2:
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";
}
}
}
此外,维护您的代码的人可以在您离开公司后添加此实现。这就是为什么您不应该依赖 String 值,而是坚持使用s 的数值(由常量MyEnum.VALUE1
、MyEnum.VALUE2
等表示) 。enum
要添加到 Peter Lawrey 的评论,请查看去年的这篇文章,其中讨论了在 JDK7 之前和之后在 Java 中切换字符串。