OpenJDK 14.0.1 给出“开关表达式未涵盖所有可能的输入值”

Mat*_*ias 7 java enums javac switch-statement

使用 OpenJDK 14.0.1

public class Example {
    private String test(final ExampleEnum ee) {
        return switch (ee) {
            case Value -> null;
        };
    }
}
Run Code Online (Sandbox Code Playgroud)
public enum ExampleEnum {

    Value;

    public enum InnerEnum {
    }

}
Run Code Online (Sandbox Code Playgroud)

编译失败并显示“开关表达式未涵盖所有可能的输入值”。如果我InnerEnumExampleEnum代码中删除编译。为什么这个内部枚举的存在会导致 switch 表达式失败?是否有逻辑解释或编译器错误?

小智 6

您需要添加默认情况,如下所示:

public class Example {
private String test(final ExampleEnum ee) {
    return switch (ee) {
        case Value -> null;
        default -> throw new IllegalStateException("Unexpected value");
    };
}
Run Code Online (Sandbox Code Playgroud)