在switch-case中使用枚举值的字符串表示

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)

  • 如果参数无效,请注意抛出NPE和IllegalArgumentException的valueOf().Bloke的代码有意义避免处理这些异常(但遗憾的是不起作用). (3认同)

das*_*ght 7

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!而非.