一、前言

写Java代码,空指针异常(NPE)是所有后端程序员的噩梦。很多新手和老开发习惯堆砌大量if(obj != null),代码臃肿难维护,可读性极差,代码评审必被驳回。

JDK8推出的Optional工具类,就是专门用来消灭空指针、消灭冗余if判空。本文分享5个生产环境直接可用的Optional实战写法,附带简短代码,一行代码搞定判空,代码瞬间整洁,面试也能加分。

二、传统烂代码(千万别再这么写)

// 多层if嵌套,代码金字塔,可读性极差
public String getUserCity(User user){
    if(user != null){
        Address address = user.getAddress();
        if(address != null){
            return address.getCity();
        }
    }
    return "未知城市";
}

多层if嵌套俗称代码金字塔,维护成本极高,一旦漏写一层判空,直接线上报错。

三、5种Optional优雅实战写法(生产直接抄)

1. 基础对象判空,为空给默认值

String name = Optional.ofNullable(user.getName()).orElse("默认姓名");

2. 为空时执行函数,懒加载默认值(性能更优)

String name = Optional.ofNullable(user.getName()).orElseGet(() -> "默认姓名");

3. 为空直接抛出自定义业务异常(接口开发常用)

Optional.ofNullable(user).orElseThrow(() -> new RuntimeException("用户信息不能为空"));

4. 多层对象链式判空,彻底消灭if嵌套

// 一行代码搞定多层属性获取
String city = Optional.ofNullable(user)
        .map(User::getAddress)
        .map(Address::getCity)
        .orElse("未知城市");

5. 非空才执行逻辑,为空直接跳过

Optional.ofNullable(user).ifPresent(u -> System.out.println(u.getName()));

四、Optional避坑提醒(很多人都用错)

  • 禁止使用Optional.get():无判断直接get,为空依旧报错;
  • 不要把Optional作为方法入参,违背设计初衷;
  • 不要滥用Optional,基础数据类型无需封装。

五、结语

优雅的代码从来不是堆砌判断语句,而是善用JDK自带工具类简化逻辑。把项目中所有多层if判空全部替换为Optional,代码整洁度提升一倍,代码评审再也不会被挑毛病。

下期分享Java Stream流式编程实战,简化集合遍历代码,感兴趣可以一键三连~

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐