Java Feature - Switch Pattern Matching
OOP
存在潜在的兼容性问题
Switch 模式匹配
- 将模式匹配扩展到 switch 语句和 switch 表达式
- 允许测试多个模式,每个模式都可以有特定的操作
1 | public static boolean isSquare(Shape shape) { |
扩充的匹配类型
- 在 JDK 17 之前,switch 关键字可以匹配的数据类型 - 数字 + 枚举 + 字符串 - 本质上是整型的原始类型
- 在 JDK 17 开始,支持引用类型
支持 null - 不会抛出 NPE - 在 JDK 17 之前需要先判空
1 | public static boolean isSquare(Shape shape) { |
类型匹配
- 对类型匹配来说,switch 要匹配的数据是一个引用
- 当类型匹配时,还能获得匹配变量 - 不再需要强制转换 - 降低维护成本
穷举
- 使用 switch 表达式,需要穷举所有场景,否则编译器会报错
- 问题提前暴露,降低代码维护成本
性能优化
- 使用 if-else 的处理方式,每一个场景,都至少对应一个 if-else 语句,顺序执行 - 时间复杂度为
O(N)
- 使用 switch 模式匹配,不需要顺序执行 - 时间复杂度为
O(1)
default - 总能穷举所有场景,但丧失了检查匹配场景有没有变更的能力
1 | public static boolean isSquare(Shape shape) { |
All articles in this blog are licensed under CC BY-NC-SA 4.0 unless stating additionally.