我已经在Java中讨论了几个与null检查相关的问题以及相关的最佳实践。经过长时间的搜索,我可以看到Objects.nonNull ()
起到了作用,尽管它看起来像橙色而不是苹果。
现在我使用Objects.nonNull()
和短路逻辑and进行以下检查。
if (Objects.nonNull (obj1) &&
Objects.nonNull (obj1.getObj2()) &&
Objects.nonNull (obj1.getObj2().getObj3 ())
{
obj1.getObj2().getObj3().doSomething();
}
当我清楚地知道自己的意图时,我发现它更多余,可读性也更低。
是否有其他方法可以以函数方式处理它,以断言更深对象的非null状态,而不面临null指针异常。
使用!=null
是执行null检查的正常方法,但这里有一种替代方法,允许您使用Optional
将它们链接起来。
Optional.ofNullable(obj1).map(class1::getObj2)
.map(class2::getObj3)
.ifPresent(class3::doSomething);
如果要执行的代码不是简单的函数调用,则可以使用lambda表达式来代替任何方法引用。
Optional.ofNullable(obj1).map(x -> x.getObj2())
.map(x -> x.getObj3())
.ifPresent(x -> {
System.out.println("Now I can use my obj3 "+x);
});