我试图在Java中声明一个枚举,并在switch语句中使用该类型的变量,其中涵盖了该类型的枚举常量的所有可能情况.
enum MyEnum {
FOO,
BAR
}
private static void test(MyEnum e) {
String msg;
switch (e) {
case FOO:
msg = "foo";
break;
case BAR:
msg = "bar";
break;
}
System.out.println("Enum is: " + e + " msg is: " + msg); //compiler error
}
Run Code Online (Sandbox Code Playgroud)
为什么不编译器能够检测该开关总是初始化msg(或抛出一个NullPointerException,因为e是null)?
use*_*751 13
想象一下,如果MyEnum是一个单独的类.然后就可以重新编译MyEnum类,并添加新值,而无需重新编译EnumSwitchTest(因此不会出现任何错误).
然后,另一个类可以test使用新值调用.