一些人认为 Optional 类型值得在集合中使用。据称它解决了像 HashMap 这样的问题,如果没有键的映射或者 null 映射到键,则返回 null。如果您使用 Map<Optional<Something>>,那么您可以清楚地将缺失的映射和缺失的值分开。 这样你就在兔子洞里更深了一层。
首先...
你可以...
...在不使用 Optional 的情况下判断键是否映射到 null 或未映射。有方法 containsKey()。这是另一个方法调用,用于将非映射键与映射空值分开。但是,调用 Optional 也会这样做。那么有什么意义呢?另一方面...
你不需要...
...判断键是否映射到 null 或映射是否丢失。如果两种情况下您的程序代码存在差异,那么您以错误的方式对业务逻辑进行了编码。这当然是一种代码味道。将 null 视为“无”,而不是认为“null 被分配给键 'aaaaaarrghhh'”,大声说:没有任何东西被分配给键 'aaaaaarrghhh'。你看?没有区别。现在你办公室里的每个人都用滑稽的眼神看着你。
使用 Optional 作为 Map 中的值...
你会...
......一段时间后,最终在兔子洞中更深一层。代码过着独立的生活。开发它的不仅是你。在大型组织中,有些开发人员在编码时肯定喝醉了。 (这是对某些代码的唯一合理解释。)他们将很快填充您的 Map<Optional<Something>>
- 空值,
- 缺少可选值
- 甚至包装其他东西的可选对象,但不是你的“东西”。
有时,如果幸运的话,您甚至可能会发现一些非空、非缺失的 Optional<Something> 值。