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

相关推荐
IT_陈寒22 分钟前
Redis内存警告竟是因为这个不起眼的配置项
前端·人工智能·后端
Python私教29 分钟前
AI 漫剧角色一进分镜就变脸?把提示词升级成“角色 ID + 镜头合同”
后端
Python私教30 分钟前
一次生成 20 个角色却全都撞脸:我用“角色合同”重做了批量生成流程
后端
用户594404103561 小时前
Go 语言高性能 Web 服务开发:基于 Gin + GORM + Redis 构建 RESTful API
后端
Python私教1 小时前
App 第一版该砍什么?用三问法守住 MVP 的工程底线
后端·mvp
ServBay2 小时前
AI 工程师必备的 9 个 Python 库,从数据验证到模型优化
后端·python·ai编程
Python私教2 小时前
软件开发报价差 3 倍,真正的工程冲突不在价格
后端·架构
kisshyshy2 小时前
掘金同款社区数据库设计:9张表带你吃透建表、索引与约束
后端·sql·markdown
元界metalite2 小时前
SpringBoot项目Maven-BOM统一版本就不会冲突吗
后端
蓝宝石Kaze2 小时前
Gin 框架快速上手
后端