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);
相关推荐
CoderIsArt2 小时前
C#中UI 线程与 Dispatcher
开发语言·ui·c#
微尘寒风2 小时前
【Git】的安装和使用
java·git
y = xⁿ2 小时前
DeepSeek Harness 学习日记:关于Agent接口,工具调用的底层实现
android·java·学习
侧耳倾听1113 小时前
jwt使用简介
java·jwt
顶点多余4 小时前
那些在算法中适合巩固的知识点---1
java·前端·算法
AI人工智能+电脑小能手4 小时前
大白话说Java设计模式-46-责任链模式(业务实战篇)
java·设计模式·责任链模式·风控校验·servlet filter·spring interceptor·链式处理
jay神4 小时前
【计算机毕业设计】基于SpringBoot的程序教学辅助系统
java·前端·vue.js·spring boot·后端·毕业设计·课程设计
AI情绪识别开源4 小时前
检信 ALLEMOTION OS 加密打包可执行程序 — 全面测试报告版本: v1.3功能测试 / 性能测试 /
开发语言·数据结构·人工智能·功能测试
2601_962066495 小时前
【Sql Server】Update中的From语句,以及常见更新操作方式
android·java·数据库