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 新特性》

相关推荐
王码码20354 小时前
Go语言的测试:从单元测试到集成测试
后端·golang·go·接口
王码码20354 小时前
Go语言中的测试:从单元测试到集成测试
后端·golang·go·接口
嵌入式×边缘AI:打怪升级日志5 小时前
使用JsonRPC实现前后台
前端·后端
小码哥_常6 小时前
从0到1:Spring Boot 中WebSocket实战揭秘,开启实时通信新时代
后端
lolo大魔王6 小时前
Go语言的异常处理
开发语言·后端·golang
IT_陈寒8 小时前
Python多进程共享变量那个坑,我差点没爬出来
前端·人工智能·后端
码事漫谈8 小时前
2026软考高级·系统架构设计师备考指南
后端
AI茶水间管理员10 小时前
如何让LLM稳定输出 JSON 格式结果?
前端·人工智能·后端
其实是白羊10 小时前
我用 Vibe Coding 搓了一个 IDEA 插件,复制URI 再也不用手动拼了
后端·intellij idea
用户83562907805110 小时前
Python 操作 Word 文档节与页面设置
后端·python