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);
相关推荐
计算机毕设定制辅导-无忧学长5 分钟前
《基于SpringBoot的未成年人健康知识科普平台的设计与实现》
java·开发语言·vue.js·spring boot·未成年人健康知识科普平台
Wang's Blog5 分钟前
Java 项目实战: 外卖平台-数据库环境搭建与十一张表结构解析
java·服务器·redis
Ivanqhz19 分钟前
Ping-Pong 双缓冲
开发语言·人工智能·python·深度学习·mlir
m0_7345717623 分钟前
深入理解C++ RAII
开发语言·c++
白远山24 分钟前
上海24小时自助健身房系统软件开发实战指南
java·架构·uni-app·需求分析
泡海椒26 分钟前
jquick-pdf 表格实战:动态数据 PDF 报表生成
java·开发语言·pdf
aramae34 分钟前
模拟实现memset()(C语言)
c语言·开发语言·后端
OxYGC1 小时前
[AI工程] Spring AI 第十四篇:Agent 五种模式在 2.0 里怎么写
java·spring·ai·ai编程
code2cat1 小时前
【随笔】从聊天到调用工具:理解MCP在AI应用中的位置
java·人工智能
2501_933923251 小时前
Spring Bean作用域揭秘:单例、原型、请求与会话的区别
java·后端·spring·java-ee