大数跨境
0
0

改变习惯性 !=null 判空,只需一秒!

改变习惯性 !=null 判空,只需一秒! Java技术图谱
2025-12-02
0

哎我跟你说…这事儿真是昨天晚上十一点多,在我家小区楼下遛狗的时候,小李突然在群里喊我,说他代码又因为那个“!= null 判空”栽了,我当时狗都被我拽一激灵…反正你们懂,就是那个老毛病。

我边掏纸边跟他说,我说“你别老 != null != null 地敲,你这手势跟敲木鱼似的…你稍微换一下思路,一秒钟就干干净净了”。

他还不信,非说这种写法稳。我说稳啥…稳翻车是吧。

反正我就举了个我白天写接口时踩到的例子,脑袋还晕着,等下我喝口水…好了继续说。

就那会儿我在写一个用户同步的小功能,正常逻辑你们肯定会这样写对吧:

if (user != null) {
    if (user.getProfile() != null) {
        if (user.getProfile().getAddress() != null) {
            return user.getProfile().getAddress().getCity();
        }
    }
}
return null;

我当时敲到第二层的时候整个人都破防了,你们是不是也经常这样,敲着敲着手腕开始疼…然后心态还会炸:“我靠怎么又一层?我到底在写啥?”

我当时就在办公室窗口那坐着,看着外面骑电动车的外卖小哥飞过去,我心想要不我也改行算了…但突然我想起来之前看源码的时候,啊,就是那个 Objects 类,你们懂吧,java.util.Objects 就那个。

我就直接改了:

return Optional.ofNullable(user)
        .map(User::getProfile)
        .map(Profile::getAddress)
        .map(Address::getCity)
        .orElse(null);

一秒钟…啊不对,可能两秒吧,反正很快,手不用再那边 !=null !=null 地敲,还不会漏判。有时候你加班到脑袋发木,少写一个 null 判空,第二天分分钟给你线上报错。

我后来把这段甩给小李,他那边沉默了大概十秒,我以为他睡着了…结果他说一句“卧槽原来这么写啊,我每次都 if if if 的。”我说你别 if 了,人都疯了。

不过你们别误会,我不是说 Optional 是银弹,我昨天还被 Optional 弄得一脸懵,你知道吧,它链式里面一旦哪个 map 返回空了后面就全断了,有时候你还得调试半天。但至少判空这种破事,它是真的能帮我们省很多脑细胞。

还有啊,有些地方根本没必要判 null,你比如说我们内部方法根本不接受 null 的参数,就直接:

Objects.requireNonNull(user, "user不能为空");

啪的一下,谁敢传 null,当场炸给他看。我前几天调接口时就这么干的,传一个 null 过来直接把前端吓得以为服务器爆炸…但至少他知道哪里不对。

反正吧,我在群里跟他们说了半天,你们写代码别老是机械地 != null,判空不是不能写,但别写成反射动作。看场景,用工具类、Optional、提前失败(fail-fast)都能让代码干净很多。

哎对,我狗又想出去,我先带它下去溜一圈…等会儿回来再跟你们说上次我因为一个 null 搞了一个小时的那个蠢事儿…算了先这样吧。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html


🔥东哥私藏精品🔥


东哥作为一名老码农,整理了全网最全《Java高级架构师资料合集》。总量高达650GB

【声明】内容源于网络
0
0
Java技术图谱
回复 java,领取Java面试题。分享AI编程,AI工具,Java教程,Java下载,Java技术栈,Java源码,Java课程,Java技术架构,Java基础教程,Java高级教程,idea教程,Java架构师,Java微服务架构。
内容 1111
粉丝 0
Java技术图谱 回复 java,领取Java面试题。分享AI编程,AI工具,Java教程,Java下载,Java技术栈,Java源码,Java课程,Java技术架构,Java基础教程,Java高级教程,idea教程,Java架构师,Java微服务架构。
总阅读62
粉丝0
内容1.1k