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

Java switch语句在枚举上设置为默认值,java,android,enums,Java,Android,Enums,我有一个Java(适用于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: th

我有一个Java(适用于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");
    }
}
我在default子句中抛出了一次异常!有人能解释一下这在理论上是否可行,以及如何做到


<例如,在C++中,你可以拥有一个枚举变量,它的值不是声明的枚举值,但我想在爪哇你不能这样做,如果我错了,请纠正我。< /P> < P>我不知道这会如何失败,但是我建议将你的枚举重构为:

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());
}

“我在默认子句中引发了一次异常!有人能解释一下这在理论上是否可能…”好吧,如果发生了,那么理论上是可能的。可能您的枚举已更新并添加了新值,但您的
开关未更新以处理它们,因此,如果在
f
方法中使用了一些新的附加值,您将得到
非法状态异常。。。甚至没有人扩展它@T.J.Crowder这个词理论上与Java语言规则有关,这是一个问题——有没有一种方法可以让枚举变量保存一些不属于枚举值的内容。