java switch 模式匹配

ddatsh

dev #java

Java 12之前,switch只是一个语句。现在可以使用switch表达式

JEP 406

JEP 406 是一个关于在 Java 中为 switch 语句和表达式增加模式匹配功能的特性。最初作为预览功能在 JDK 17 中引入, JDK 18、19 继续迭代,JDK 21 中成为正式功能

主要目标

新增模式类型

动机

Java 16 JEP 394 扩展了 instanceof 运算符以支持类型模式和模式匹配。使 instanceof 和强制转换的复合操作可以被简化。JEP 406 旨在将模式匹配的概念扩展到 switch,使 switch 语句能够更加灵活和强大

用法示例

switch (o) {
    case String s -> System.out.println(s);
    case Integer i -> System.out.println("Integer");
    default -> System.out.println("Unknown type");
}

完整性检查

JEP 406 还引入了对 switch 表达式和语句的完整性检查。如果 switch 的选择器表达式是一个封闭类(sealed class),编译器可以检查 switch 是否覆盖了所有的可能情况,从而确定是否需要 default 标签

依赖关系

JEP 406 建立在 JEP 394(模式匹配)和 JEP 361(switch 表达式)的基础上,并期望与 JEP 405(记录模式)保持一致性