switch匹配:能不能适配不同的类型

如何使用具有模式匹配能力的 switch,来判断一个对象是不是正方形:

js 复制代码
public static boolean isSquare(Shape shape) {
    return switch (shape) {
        case null, Shape.Circle c -> false;
        case Shape.Square s -> true;
    };
}

具有模式匹配能力的 switch,提升了 switch 的数据类型匹配能力。switch 要匹配的数据,现在可以是整形的原始类型(数字、枚举、字符串),或者引用类型。

具有模式匹配能力的 switch,支持空引用的匹配。如果我们能够有意识地使用这个特性,可以提高我们的编码效率,降低代码错误。

寻找匹配情景时,switch 并不需要按照 case 语句的顺序执行。对于 switch 的处理方式,找到匹配的情景的时间复杂度是 O(1)。也就是说,switch 寻找匹配情景的时间复杂度和需要处理的情景数量关系不大。

使用了 default,也就意味着这样的 switch 表达式总是能够穷举出所有的情景。遗憾的是,这样的代码丧失了检测匹配情景有没有变更的能力。

一般来说,只有我们能够确信,待匹配类型的升级,不会影响 switch 表达式的逻辑的时候,我们才能考虑使用缺省选择情景。

在我们日常的编码实践中,为了尽早暴露子类扩充出现的兼容性问题,降低代码的维护难度,提高多情景处理的性能,我们应该优先考虑使用 switch 的模式匹配,而不是传统的 if-else 语句。


此文章为9月Day9学习笔记,内容来源于极客时间《深入剖析 Java 新特性》

相关推荐
lpfasd12330 分钟前
Spring Boot 4.0.1 集成 Spring Boot AI 全攻略
人工智能·spring boot·后端
最贪吃的虎1 小时前
Java基础之泛型
java·运维·jvm·分布式·后端
用户21411832636021 小时前
上期方案太难?Antigravity桌面工具来了,5分钟白嫖Claude Opus 4.5
后端
吃果冻不吐果冻皮2 小时前
你真的搞懂了LLM性能压测的各项指标吗?
后端
梦茹^_^3 小时前
Flsk框架(自学)2
后端·python·flask·web框架
Tony Bai3 小时前
Go 考古:Go 官方如何决定支持你的 CPU 和 OS?
开发语言·后端·golang
IT枫斗者4 小时前
Spring Boot 4.0 正式发布:新一代起点到底“新”在哪?(Spring Framework 7 / Java 25 / JSpecify / API 版本管理 / HTTP Service
java·开发语言·spring boot·后端·python·spring·http
William_cl4 小时前
ASP.NET入门必吃透:HTTP 协议从流程到状态码,代码 + 避坑指南
后端·http·asp.net
独自破碎E4 小时前
Spring Boot 2.x和1.x版本相比有哪些区别与改进?
java·spring boot·后端
To Be Clean Coder5 小时前
【Spring源码】getBean源码实战(四)——FactoryBean
java·后端·spring