Java switch语句在枚举上变为默认值

时间:2014-08-23 13:13:35

标签: java android enums

我有一个类似于这个的Java(for Android)代码:

enum MyEnum {
    A, B, C
} 

String f(MyEnum e) {
    if (e == null) {
        return null;
    }

    switch(e) {
        case A: return "AA";
        case B: return "BB";
        case C: return "CC";
        default: throw new IllegalStateException("invalid enum");
    }
}

我在抛出一次的默认子句中得到了异常!有人可以解释这在理论上是否可行以及如何实现?

例如在C ++中你可以有一个枚举变量,该值不是声明的枚举值,但我想在Java中你不能这样做,如果我错了就纠正我。

1 个答案:

答案 0 :(得分:1)

我不知道这可能会失败,但我建议重构你的枚举:

enum MyEnum {
  A("AA"),
  B("BB"), 
  C("CC");

  private final String value;  

  public MyEnum(String value){
    this.value = value;
  }

  public String f(){
    return value;
  }
}

现在您仍然可以执行相同的操作,但添加新枚举可以100%安全

public void foo(MyEnum enum){
  System.out.println(enum.f());
}