系统环境:
- Java JDK 版本:1.8
参考地址:
- Oracle JDK API 参考文档
https://docs.oracle.com/javase/8/docs/api/java/util/Optional.html
- 菜鸟教程-Java 8 Optional 类
https://www.runoob.com/java/java8-optional-class.html
一、Optional 简介
Optional 是一个容器对象,可以存储对象、字符串等值,当然也可以存储 null 值。Optional 提供很多有用的方法,能帮助我们将 Java 中的对象等一些值存入其中,这样我们就不用显式进行空值检测,使我们能够用少量的代码完成复杂的流程。
比如它提供了:
- of() 方法,可以将值存入 Optional 容器中,如果存入的值是 null 则抛异常。
- ofNullable() 方法,可以将值存入 Optional 容器中,即使值是 null 也不会抛异常。
- get() 方法,可以获取容器中的值,如果值为 null 则抛出异常。
- getElse() 方法,可以获取容器中的值,如果值为 null 则返回设置的默认值。
- isPresent() 方法,该方法可以判断存入的值是否为空。
- …等等一些其它常用方法,下面会进行介绍。
可以说,使用 Optional 可以帮助我们解决业务中,减少值动不动就抛出空指针异常问题,也减少 null 值的判断,提高代码可读性等,这里我们介绍下,如果使用这个 Optional 类。
二、Optional 类描述
- Optional 类所在包: java.util.Optional
- Optional 类声明: public final class Optional extends Object
- Optional 类方法: public Optional filter(Predicate<? super T> predicate)
三、Optional 常用方法及使用示例
1、静态方法 Optional.of()
- 方法作用: 为指定的值创建一个指定非 null 值的 Optional。
- 方法描述: of 方法通过工厂方法创建 Optional 实例,需要注意的是传入的参数不能为 null,否则抛出 NullPointerException。
- 返回类型: Optional
- 示例代码:
调用两个 Optional.of() 方法,一个传入正常参数,另一个传入 null 参数:
public static void main(String[] args) {
// 传入正常值,正常返回一个 Optional 对象
Optional<String> optional1 = Optional.of("mydlq");
// 传入参数为 null,抛出 NullPointerException.
Optional optional2 = Optional.of(null);
}
运行代码,可以观察到控制台输出内容如下:
Exception in thread "main" java.lang.NullPointerException
at java.util.Objects.requireNonNull(Objects.java:203)
at java.util.Optional.<init>(Optional.java:96)
at java.util.Optional.of(Optional.java:108)
at club.mydlq.OptionalExample.main(OptionalExample.java:12)
可以看到传入正常参数正常返回 Optional 对象,传入 null 参数返回 NullPointerException 异常。
2、静态方法 Optional.ofNullable()
- 方法作用: 为指定的值创建一个 Optional 对象,如果指定的参数为 null,不抛出异常,直接则返回一个空的 Optional 对象。
- 方法描述: ofNullable 方法是和 of 方式一样,都是用于创建 Optional 对象,只是传入的参数 null 时,会返回一个空的 Optional 对象,而不会抛出 NullPointerException 异常。
- 返回类型: Optional
- 示例代码:
调用 Optional.ofNullable() 方法,传入 null 参数:
public static void main(String[] args) {
// 传入正常值,正常返回一个 Optional 对象
Optional<String> optional1 = Optional.ofNullable("mydlq");
// 传入 null 参数,正常返回 Optional 对象
Optional optional2 = Optional.ofNullable(null);
}
运行代码,可以观察到正常传入值和传入 null 值时,都没有抛出异常。
3、对象方法 isPresent()
- 方法作用: 如果值存在则方法会返回 true,否则返回 false。
- 方法描述: 该方法其实就是用于判断创建 Optional 时传入参数的值是否为空