Java switch语句在枚举上设置为默认值
我有一个Java(适用于Android)代码与此类似: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
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语言规则有关,这是一个问题——有没有一种方法可以让枚举变量保存一些不属于枚举值的内容。