Java基础——Optional

Optional 类主要解决的问题是臭名昭著的空指针异常NPE(NullPointerException)

在 Java 8 之前,任何访问对象方法或属性的调用都可能导致 NullPointerException:

java 复制代码
String isocode = user.getAddress().getCountry().getIsocode().toUpperCase();

在这个小示例中,如果我们需要确保不触发异常,就得在访问每一个值之前对其进行明确地检查:

java 复制代码
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可以精简代码,降低复杂度:

java 复制代码
String result = Optional.ofNullable(user)
  .flatMap(User::getAddress)
  .flatMap(Address::getCountry)
  .map(Country::getIsocode)
  .orElse("default");

Optional 创建

创建 Optional 对象主要三种:

● Optional.of(T t):创建一个 Optional 对象,参数 t 必须非空;

● Optional.empty():创建一个空的Optional实例;

● Optional.ofNullable(T t):创建一个Optional对象,参数t 可以为 null。

  • empty(): 尝试访问 emptyOpt 变量的值会导致 NoSuchElementException。
java 复制代码
Optional<User> emptyOpt = Optional.empty();
emptyOpt.get();
  • of(): 如果user为空,会抛出NullPointerException。
java 复制代码
Optional<User> opt = Optional.of(user);
  • ofNullable(): 如果对象即可能是 null 也可能是非 null,你就应该使用 ofNullable() 方法。
java 复制代码
Optional<User> opt = Optional.ofNullable(user);
相关推荐
帮帮志1 分钟前
启动phcharm报错:Archived non-system classes are disabled because the java.system.
java·开发语言
秦苒&2 分钟前
【C语言指针五】转移表、回调函数、qsort、qsort函数的模拟实现
c语言·开发语言·c#
棒棒的唐4 分钟前
Avue2图片上传使用object对象模式时,axios的请求模式用post还是get?
开发语言·前端·javascript·avue
Alex_81D6 分钟前
Spring Data JPA以及JPQL等特性详细使用教程
java·数据库·后端
spencer_tseng7 分钟前
Eclipse JDT Core for Java Code Formatter
java·ide·eclipse
秋邱8 分钟前
Java 运算符与流程控制:全类型运算符用法 + 分支 / 循环语句实战
java·开发语言
万邦科技Lafite10 分钟前
淘宝开放API批量上架商品操作指南(2025年最新版)
开发语言·数据库·python·开放api·电商开放平台·淘宝开放平台
Chase_______14 分钟前
【JAVA基础指南(二)】快速掌握流程控制
java·开发语言
Slow菜鸟15 分钟前
Java基础架构设计(四)| 通用响应与异常处理(单体/分布式通用增强方案)
java·开发语言·分布式
wheelmouse778815 分钟前
Java工程师Python实战教程:通过MCP服务器掌握Python核心语法
java·服务器·python