哎我跟你说…这事儿真是昨天晚上十一点多,在我家小区楼下遛狗的时候,小李突然在群里喊我,说他代码又因为那个“!= 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。

