Java开发必看!5个高频空指针优雅解决方案,告别if判空烂代码
·
一、前言
写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流式编程实战,简化集合遍历代码,感兴趣可以一键三连~
更多推荐



所有评论(0)