是否有任何Java Functional方法可以避免级联的NonNull检查



我已经在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);
                         });

最新更新