第 6 章 Optional类
唉,为什么只要与
Optional类有关的话题,就有那么多消息呢?——Brian Goetz
lambda-libs-spec-experts 邮件列表管理员
(2013 年 10 月 23 日)
Java 8 API 引入了一种称为 java.util.Optional 的类。虽然不少开发人员认为这个类的作用是从代码中删除 NullPointerException,不过其实际用途并非如此。相反,Optional 类设计用来在返回值可能合法为 null 时与用户通信。如果根据某些条件过滤值流后恰好没有元素存留,就会出现返回值合法为 null 的情况。
在 Stream API 中,如果流中没有元素,reduce、min、max、findFirst 以及 findAny 方法将返回 Optional。
Optional 实例具有两种状态,要么是对 T 类型实例的引用,要么为空。前者称为存在(present),后者称为空(empty,与 null 相对)。
虽然
Optional是一种引用类型,但不应被赋值为null,否则将导致严重的错误。
这一章着眼于 Optional 的各种习惯用法。如何正确使用 Optional 可能引发公司内部的激烈争论 1,好在有一些标准建议可供参考,遵循这些原则有助于在讨论时清晰传递我们的意图。
1作者对于这种讨论相当老练。
虽然 