必须同步配置语言级别、模块声明和代码结构才能启用Switch模式匹配与密封类穷尽性检查:设Project language level为26(Preview),定义sealed接口及permits子类,switch表达式须全覆盖且禁用default。

要在 IntelliJ IDEA 2026 中正确启用并验证 Switch 模式匹配与密封类的编译期穷尽性检查,必须同步配置语言级别、模块声明和代码结构,缺一不可。
启用 Java 26 语言级别
打开 File → Project Structure → Project,将 Project language level 下拉菜单设为 26 (Preview);该选项仅在安装 JDK 26 EA 或 GA 版本后才会出现,【未安装 JDK 26 将无法选择此语言级别】。
点击 OK 保存后,IDEA 会自动重载项目并激活对 JEP 530(原始类型模式匹配)、JEP 405(记录类增强)及密封类穷尽性检查的语法支持。
定义密封类体系
新建一个顶层接口或抽象类,用 sealed 修饰,并通过 permits 明确列出所有直接子类型:
sealed interface Shape permits Circle, Rectangle, Triangle {}
每个子类型必须与父类型位于同一模块(module-info.java 中无需额外导出),且显式声明为 final、sealed 或 non-sealed;若任一子类缺失或声明为 class Circle extends Shape(无 final/sealed/non-sealed 修饰),编译器将拒绝构建。
注意:子类必须物理存在——不能只在 permits 中声明而未定义对应类文件,否则 IDEA 会在编辑器中报红,且 javac 编译失败。
编写全覆盖 switch 表达式
第一步:声明目标变量为密封父类型,例如 Shape shape = new Circle(3.0);。
第二步:使用 switch 表达式,每个 case 必须精确对应 permits 列表中的一个子类名,并绑定变量:
double area = switch (shape) { case Circle c -> Math.PI * c.radius() * c.radius(); case Rectangle r -> r.width() * r.height(); case Triangle t -> 0.5 * t.base() * t.height(); case null -> throw new IllegalArgumentException("shape must not be null");};
IDEA 2026 会实时高亮:若漏掉任意一个 permits 子类,或未处理 null,则整行 switch 报错,【编译器强制要求全覆盖,不允许 default 分支替代】。
第三步:尝试删除任一 case,比如去掉 case Triangle t -> ...,IDEA 立即标红并提示 “Missing case label for Triangle”,光标悬停显示 “Switch expression does not cover all permitted subtypes”。
验证原始类型模式匹配
方法一:在 switch 表达式中直接匹配原始类型
String describe(Object obj) { return switch (obj) { case byte b -> "byte: " + b; case int i -> "int: " + i; case long l -> "long: " + l; default -> "other"; };}
方法二:用 instanceof 做原始类型模式匹配
Object input = 123L;if (input instanceof long value) { System.out.println("Got primitive long: " + value); // value 是原始 long,非 Long}
这一步操作起来很简单,直接把代码粘贴进 IDEA 2026 的 Java 文件里就能看到语法高亮和补全;但注意:若项目语言级别不是 26,case byte b 这类写法会标红,且无法编译。


















