Optional类
程序员文章站
2022-01-09 09:49:54
...
一. 前言
Optional 类主要解决的问题是臭名昭著的空指针异常(NullPointerException)
我们从一个简单的用例开始,在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerException:
String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();
在这个小示例中,如果我们需要确保不触发异常,就得在访问每一个值之前对其进行明确地检查:
if (user != null) {
Address address = user.getAddress();
if (address != null) {
Country country = address.getCountry();
if (country != null) {
String isocode = country.getIsocode();
if (isocode != null) {
isocode = isocode.toUpperCase();
}
}
}
}
你看到了,这很容易就变得冗长,难以维护。
为了简化这个过程,我们来看看用 Optional 类是怎么做的。从创建和验证实例,到使用其不同的方法,并与其它返回相同类型的方法相结合,下面是见证 Optional 奇迹的时刻。
二. Optional
1. 创建 Optional 实例
Optional对象可能包含值,也可能为空,有以下三种创建方法
- 使用 empty() 方法创建一个空的 Optional。
Optional<User> emptyOpt = Optional.empty();
emptyOpt.get();
- 使用 of() 方法创建包含值的 Optional,不能传入null类型,会抛出 NullPointerException:
Optional<User> opt = Optional.of(user);
- 使用 ofNullable() 方法创建包含值的 Optional,可以传入null类型
Optional<User> opt = Optional.ofNullable(user);