在集合中使用“可选”是否值得?

一则或许对你有用的小广告

欢迎加入小哈的星球 ,你将获得:专属的项目实战 / 1v1 提问 / Java 学习路线 / 学习打卡 / 每月赠书 / 社群讨论

  • 新项目:《从零手撸:仿小红书(微服务架构)》 正在持续爆肝中,基于 Spring Cloud Alibaba + Spring Boot 3.x + JDK 17...点击查看项目介绍 ;
  • 《从零手撸:前后端分离博客项目(全栈开发)》 2 期已完结,演示链接: http://116.62.199.48/ ;

截止目前, 星球 内专栏累计输出 63w+ 字,讲解图 2808+ 张,还在持续爆肝中.. 后续还会上新更多项目,目标是将 Java 领域典型的项目都整一波,如秒杀系统, 在线商城, IM 即时通讯,权限管理,Spring Cloud Alibaba 微服务等等,已有 2200+ 小伙伴加入学习 ,欢迎点击围观

一些人认为 Optional 类型值得在集合中使用。据称它解决了像 HashMap 这样的问题,如果没有键的映射或者 null 映射到键,则返回 null。如果您使用 Map<Optional<Something>>,那么您可以清楚地将缺失的映射和缺失的值分开。 这样你就在兔子洞里更深了一层。

首先...

你可以...

...在不使用 Optional 的情况下判断键是否映射到 null 或未映射。有方法 containsKey()。这是另一个方法调用,用于将非映射键与映射空值分开。但是,调用 Optional 也会这样做。那么有什么意义呢?另一方面...

你不需要...

...判断键是否映射到 null 或映射是否丢失。如果两种情况下您的程序代码存在差异,那么您以错误的方式对业务逻辑进行了编码。这当然是一种代码味道。将 null 视为“无”,而不是认为“null 被分配给键 'aaaaaarrghhh'”,大声说:没有任何东西被分配给键 'aaaaaarrghhh'。你看?没有区别。现在你办公室里的每个人都用滑稽的眼神看着你。

使用 Optional 作为 Map 中的值...

你会...

......一段时间后,最终在兔子洞中更深一层。代码过着独立的生活。开发它的不仅是你。在大型组织中,有些开发人员在编码时肯定喝醉了。 (这是对某些代码的唯一合理解释。)他们将很快填充您的 Map<Optional<Something>>

  • 空值,
  • 缺少可选值
  • 甚至包装其他东西的可选对象,但不是你的“东西”。

有时,如果幸运的话,您甚至可能会发现一些非空、非缺失的 Optional<Something> 值。

相关文章