模式匹配(Pattern Matching)
Java 16 引入了模式匹配,用来简化类型检查和类型转换的代码。
以前我们写代码,instanceof 检查后还要手动强制转换:
现在可以这样写:
今天我们就来把模式匹配彻底讲透。
一、instanceof 模式匹配
1.1 Java 16+:类型测试模式
1.2 模式变量的作用域
1.3 配合条件
二、Record Pattern(记录模式)
2.1 基本用法
2.2 嵌套 Record 模式
2.3 Record + instanceof
三、Switch 模式匹配
3.1 Java 21+:Switch 表达式模式匹配
3.2 Guard Pattern(带条件的模式)
3.3 Null 处理
四、Array Pattern(数组模式)
4.1 基本用法
4.2 嵌套数组模式
五、【直观类比】
【直观类比】
模式匹配就像"拆快递":
六、实际应用
6.1 简化处理逻辑
6.2 模式匹配 + Switch
七、注意事项
7.1 变量遮蔽
7.2 顺序很重要
7.3 Switch 的穷尽检查
八、面试追问链
第一层:基础用法
面试官问:"instanceof 模式匹配怎么用?"
在 instanceof 判断后直接声明变量,如 if (obj instanceof String s)。s 的作用域只在 if 块内。
第二层:Record 模式
面试官问:"Record 模式是什么?"
obj instanceof Point(int x, int y) 可以直接提取 Point 的 x 和 y 字段,不需要手动转型。
第三层:Switch 模式匹配
面试官问:"Switch 表达式支持模式匹配吗?"
Java 21+ 支持。可以在 switch 的 case 中使用模式,如 case Integer i -> 或 case Point(int x, int y) ->。
【学习小结】
- instanceof 模式匹配:在判断时声明变量
- Record 模式:直接提取字段
- Switch 模式匹配:case 使用模式
- Guard 模式:带条件的模式
- 配合 sealed class 有穷尽检查