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

What exception is inserted by the compiler to handle unknown enum values in switch expressions?

开关表达式由 JEP 361 引入,减少了开关常见用法的冗长。

作为此功能的一个特定细节,无需为枚举上的开关表达式编写 default class。以下代码编译:

public enum MyEnum {
    ONE,
    TWO;
}

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

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

JEP 和 this post 都提到编译器插入了一个默认子句,该子句抛出异常以指示这种不和谐。

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

这在 JLS 15.28.2 中有记录:

If no switch label matches, then an IncompatibleClassChangeError is thrown and the entire switch expression completes abruptly for that reason.

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