Java Feature - Type Matching
模式匹配
匹配谓词 + 匹配变量
- Java 模式匹配是一个新型的、还在持续快速演进的领域
- 类型匹配是模式匹配的一个规范,在 JDK 16 正式发布
- 一个模式是匹配谓词和匹配变量的组合
- 匹配谓词用来确定模式和目标是否匹配
- 在模式和目标匹配的情况下,匹配变量是从匹配目标中提取出来的一个或多个变量
- 对类型匹配来说
- 匹配谓词用来指定模式的数据类型
- 匹配变量数属于该类型的数据变量 - 只有一个
类型转换
生产力低下 - 类型判断 + 类型转换
- 类型判断语句,即匹配谓词 -
shape instanceof Rectangle
- 类型转换语句,使用类型转换运算符 -
(Rectangle) shape
- 声明一个新的本地变量,即匹配变量,来承载类型转换后的数据 -
Rectangle rectangle =
类型匹配
都在同一个语句中,只有匹配谓词和本地变量两部分
避免误用 - 编译器不会允许使用没有赋值的匹配变量
作用域
匹配变量的作用域
- 匹配变量的作用域,即目标变量可以被确认匹配的范围
- 如果在一个范围内,无法确认目标变量是否被匹配,或者目标变量不能被匹配,都不能使用匹配变量
- 编译器视角 - 明确被赋值 - 才能使用
- 在一个范围内,如果编译器能够确定匹配变量已经被赋值,那么它可以在这个范围内使用
- 如果编译器无法确定匹配变量是否被赋值,或者确定没有被赋值,则不能在这个范围内使用
确认匹配
1 | public static boolean isSquare(Shape shape) { |
确认不匹配
1 | public static boolean isSquare(Shape shape) { |
紧凑方式
1 | public static boolean isSquare(Shape shape) { |
1 | public static boolean isSquare(Shape shape) { |
位运算两侧的运算都要执行,不存在逻辑关系,无法保证一定类型匹配,编译器无法确定类型一定匹配
Shadowed Variable
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.