为什么在切换情况下不能使用枚举值作为字符串?(或者这有什么问题:)
String argument;
switch (argument) {
case MyEnum.VALUE1.toString(): // Isn't this equal to "VALUE1" ?
// something
break;
case MyEnum.VALUE2.toString():
// something else
break;
发布于 2012-05-01 00:47:06
您只能使用编译时已知的字符串。编译器无法确定该表达式的结果。
也许你可以试一试
String argument = ...
switch(MyEnum.valueOf(argument)) {
case VALUE1:
case VALUE2:
发布于 2012-05-01 00:46:40
to ()://这不是等于"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";
}
}
}
此外,维护您的代码的人可能会在您离开公司后添加此实现。这就是为什么不应该依赖字符串值,而是坚持使用数字值(由常量MyEnum.VALUE1
、MyEnum.VALUE2
等表示)的原因。而不是你的enum
。
发布于 2012-05-01 02:21:42
为了补充Peter Lawrey的评论,请看一下去年的this帖子,其中讨论了在JDK7之前和之后在Java语言中切换字符串。
https://stackoverflow.com/questions/10387329
复制相似问题