如何避免嵌套的空检查[重复]
Posted
技术标签:
【中文标题】如何避免嵌套的空检查[重复]【英文标题】:How to avoid nested null checks [duplicate] 【发布时间】:2020-04-01 15:26:39 【问题描述】:在 java 中有一种方法可以避免在调用的每个级别上嵌套空值检查,以确保在此过程中没有空值阻止下一次调用。有没有优雅的方法来做到这一点?
例如:
objOne.objTwo.objThree.objFour.objFive
if(objOne.objTwo!=null)
if(objOne.objTwo.objThree!=null)
if(objOne.objTwo.objThree.objFour!=null)
...
【问题讨论】:
你知道Optional类吗? @Abra,Optional
在这种情况下如何提供帮助?
这个article 可能是相关的。
@Abra,这根本没有帮助。 Optional
not 旨在替换 Java 中的每个非空条件。我想您可以从每个嵌套对象中创建一个Optional.ofNullable()
。这会使代码更难理解。
Optional
是否有帮助是一个争论的问题。但它是唯一可以帮助...除了重新设计数据结构以消除空值作为可接受的值。
【参考方案1】:
反转它们。 (将Object
替换为实际类型。)
Object item1 = objOne.objTwo;
if (item1 == null)
return; // continue if in a loop
Object item2 = item1.objThree;
if (item2 == null)
return;
Object item3 = item2.objFour;
if (item3 == null)
return;
// perform the action
这假设在您的示例结束后不需要进一步的操作。在这种情况下,您可能需要提取一个方法或进行一些其他修改,但目前没有给出这样的附加代码。
【讨论】:
这怎么算作倒置?流动没有倒置 @SharonBenAsher 取决于外部上下文,但是是的,只有在条件不成立时才会这样做。【参考方案2】:您可以使用short circuit logic 将嵌套的 if 语句合并为一个。第一个假条件将退出 if 语句
if (objOne.objTwo != null && objOne.objTwo.objThree != null && objOne.objTwo.objThree.objFour != null)
...
【讨论】:
以上是关于如何避免嵌套的空检查[重复]的主要内容,如果未能解决你的问题,请参考以下文章