为什么,当我在switch语句中有每个枚举常量的情况时,我仍然必须提供默认值吗?

dos*_*osw 7 java enums

我试图在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,因为enull)?

use*_*751 13

想象一下,如果MyEnum是一个单独的类.然后就可以重新编译MyEnum类,并添加新值,而无需重新编译EnumSwitchTest(因此不会出现任何错误).

然后,另一个类可以test使用新值调用.