第 6 章 Optional

唉,为什么只要与 Optional 类有关的话题,就有那么多消息呢?

——Brian Goetz

lambda-libs-spec-experts 邮件列表管理员

(2013 年 10 月 23 日)

Java 8 API 引入了一种称为 java.util.Optional 的类。虽然不少开发人员认为这个类的作用是从代码中删除 NullPointerException,不过其实际用途并非如此。相反,Optional 类设计用来在返回值可能合法为 null 时与用户通信。如果根据某些条件过滤值流后恰好没有元素存留,就会出现返回值合法为 null 的情况。

在 Stream API 中,如果流中没有元素,reduceminmaxfindFirst 以及 findAny 方法将返回 Optional

Optional 实例具有两种状态,要么是对 T 类型实例的引用,要么为空。前者称为存在(present),后者称为(empty,与 null 相对)。

第 6 章 Optional类 - 图1 虽然 Optional 是一种引用类型,但不应被赋值为 null,否则将导致严重的错误。

这一章着眼于 Optional 的各种习惯用法。如何正确使用 Optional 可能引发公司内部的激烈争论 1,好在有一些标准建议可供参考,遵循这些原则有助于在讨论时清晰传递我们的意图。

1作者对于这种讨论相当老练。