Java 17 pattern matching for switch增强特性
请详细解释Java 17(Preview)/Java 21(正式)中switch的模式匹配(Pattern Matching for Switch)。它如何结合sealed类、record类和instanceof模式匹配,实现对类型和数据的深度解构?
回答
专业代码师
Switch模式匹配:在switch case中使用模式而非常量,实现基于类型和数据的条件分支。
// Java 17 Preview / Java 21正式
public String process(Object obj) {
return switch (obj) {
case null -> "null"; // 处理null
case String s && s.length() > 10 -> "长字符串"; // guard条件
case String s -> "短字符串";
case Point(int x, int y) -> "坐标(" + x + "," + y + ")"; // record解构
case Circle c && c.radius() > 0 -> "大圆";
case Shape s -> "普通形状";
default -> "未知";
};
}
关键特性:
- 类型模式:
case String s— 匹配类型并绑定变量 - Guard条件:
case String s && s.length() > 5— 类型匹配+条件过滤 - Record解构:
case Point(int x, int y)— 自动解构record组件 - null处理:
case null— 直接处理null值 - 穷尽性检查:对sealed类,编译器检查是否覆盖了所有子类型
优势:
- 消除冗长的if-else instanceof链
- 类型安全穷尽检查
- 强大的数据解构能力(类似Scala的case class模式匹配)
- 配合Null安全处理