英文:
Is there any Java Functional approach to avoid cascaded NonNull Checks
问题
我已经在Java中经历了几个与空值检查相关的问题,以及围绕此问题的最佳实践。
经过长时间的搜索,我可以看到Objects.nonNull()
可以实现此目的,尽管它看起来更像是橙子而不是苹果。
现在,我有一个使用Objects.nonNull()
和短路逻辑AND的以下检查。
if (Objects.nonNull(obj1) &&
Objects.nonNull(obj1.getObj2()) &&
Objects.nonNull(obj1.getObj2().getObj3()))
{
obj1.getObj2().getObj3().doSomething();
}
当我清楚地知道我的意图时,我发现这样做更加冗余且不太易读。
是否有其他方法以函数式的方式处理,以在不面对空指针异常的情况下断言更深层对象的非空状态呢?
英文:
I have gone through several null check related questions in Java and the best practices around it.
After long search , I can see Objects.nonNull ()
serves the purpose though it looks Orange instead of Apple.
Now i have a following check using Objects.nonNull()
and short-circuiting logical AND.
if (Objects.nonNull (obj1) &&
Objects.nonNull (obj1.getObj2()) &&
Objects.nonNull (obj1.getObj2().getObj3 ())
{
obj1.getObj2().getObj3().doSomething();
}
I find it is more redundant and less readable when i clearly know my intention.
Is there any other approach to handle it in functional way to assert the non null state of the deeper object without facing Null pointer exception.
答案1
得分: 3
使用 != 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("现在我可以使用我的 obj3 " + x);
});
英文:
Using !=null
is the normal way to do null-checks, but here's an alternative way that allows you to chain them using Optional
.
Optional.ofNullable(obj1).map(class1::getObj2)
.map(class2::getObj3)
.ifPresent(class3::doSomething);
and you can use a lambda expression in place of any of the method references if the code you want to execute is not a simple function call.
Optional.ofNullable(obj1).map(x -> x.getObj2())
.map(x -> x.getObj3())
.ifPresent(x -> {
System.out.println("Now I can use my obj3 "+x);
});
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论