系统环境:
- 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 时传入参数的值是否为空,实现代码就简单一行,即 value != null 所以如果不为空则返回 true,否则返回 false。
- 返回类型: boolean
- 示例代码:
public static void main(String[] args) {
// 传入正常值,正常返回一个 Optional 对象,并使用 isPresent 方法
Optional optional1 = Optional.ofNullable("mydlq");
System.out.println("传入正常值返回:" + optional1.isPresent());
// 传入参数为 null 生成一个 Optional 对象,并使用 isPresent 方法
Optional optional2 = Optional.ofNullable(null);
System.out.println("传入 null 值返回:" + optional2.isPresent());
}
运行代码,可以观察到控制台输出内容如下:
传入正常值返回:true
传入 null 值返回:false
可以

本文介绍了Java 8中的Optional类,一个用于避免空指针异常的容器对象。通过Optional提供的of(), ofNullable()等方法,可以更安全地处理可能为null的对象。此外,Optional还提供了isPresent(), get(), ifPresent(), orElse(), orElseGet(), orElseThrow(), map(), flatMap()和filter()等方法,帮助开发者进行更优雅的空值检查和转换。文章通过示例详细解释了每个方法的作用和用法,展示了Optional在处理集合属性过滤等场景中的应用。"
48876603,5021777,自考数据库系统原理学习概览,"['数据库', '自考', '学习资料', '教育', '理论基础']
最低0.47元/天 解锁文章
6086

被折叠的 条评论
为什么被折叠?



