在集合中使用“可选”是否值得?
💡一则或许对你有用的小广告
欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论
- 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于
Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...
,点击查看项目介绍 ;- 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;
截止目前, 星球 内专栏累计输出 82w+ 字,讲解图 3441+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2800+ 小伙伴加入学习 ,欢迎点击围观
一些人认为 Optional 类型值得在集合中使用。据称它解决了像 HashMap 这样的问题,如果没有键的映射或者 null 映射到键,则返回 null。如果您使用 Map<Optional<Something>>,那么您可以清楚地将缺失的映射和缺失的值分开。 这样你就在兔子洞里更深了一层。
首先...
你可以...
...在不使用 Optional 的情况下判断键是否映射到 null 或未映射。有方法 containsKey()。这是另一个方法调用,用于将非映射键与映射空值分开。但是,调用 Optional 也会这样做。那么有什么意义呢?另一方面...
你不需要...
...判断键是否映射到 null 或映射是否丢失。如果两种情况下您的程序代码存在差异,那么您以错误的方式对业务逻辑进行了编码。这当然是一种代码味道。将 null 视为“无”,而不是认为“null 被分配给键 'aaaaaarrghhh'”,大声说:没有任何东西被分配给键 'aaaaaarrghhh'。你看?没有区别。现在你办公室里的每个人都用滑稽的眼神看着你。
使用 Optional 作为 Map 中的值...
你会...
......一段时间后,最终在兔子洞中更深一层。代码过着独立的生活。开发它的不仅是你。在大型组织中,有些开发人员在编码时肯定喝醉了。 (这是对某些代码的唯一合理解释。)他们将很快填充您的 Map<Optional<Something>>
- 空值,
- 缺少可选值
- 甚至包装其他东西的可选对象,但不是你的“东西”。
有时,如果幸运的话,您甚至可能会发现一些非空、非缺失的 Optional<Something> 值。