编译器插入什么异常来处理switch表达式中的未知枚举值?

JEP 361引入了 switch 表达式,减少了 switch 常用用法的冗长。

作为此功能的一个特定细节,default不需要为枚举上的 switch 表达式编写类。以下代码编译:

public enum MyEnum {
    ONE,
    TWO;
}

public class OtherClass {
    public static String computeAttribute(MyEnum myEnum) {
        return switch (myEnum) {
            case ONE -> "one";
            case TWO -> "two";
        };
    }
}

目前 switch 表达式是详尽的,但如果单独重新编译枚举,则枚举的新版本可能包含THREEswitch 语句没有预料到的另一个条目(例如)。

JEP 和这篇文章都提到编译器插入了一个默认子句,该子句会引发异常以表明这种不和谐。

我找不到任何说明抛出的异常的确切类型的内容。编译器在枚举值的 switch 表达式中插入的默认子句抛出的异常是什么?

回答

这记录在JLS 15.28.2 中:

如果没有 switch 标签匹配,则IncompatibleClassChangeError抛出an并且整个 switch 表达式因此而突然完成。

显然,添加新的枚举案例是“不兼容的类更改”。


以上是编译器插入什么异常来处理switch表达式中的未知枚举值?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>