在日常生活中Java 8 是如何使用 Optional 处理 null 对象

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

系统环境:

  • 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 时传入参数的值是否为空
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值