【问题标题】: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 是否有帮助是一个争论的问题。但它是唯一可以帮助...除了重新设计数据结构以消除空值作为可接受的值。

标签: java


【解决方案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) {
           ...
}

【讨论】:

    猜你喜欢
    • 2020-05-22
    • 2012-10-05
    • 2017-02-05
    • 2011-02-16
    • 1970-01-01
    • 1970-01-01
    • 2017-06-21
    • 1970-01-01
    • 2023-01-11
    相关资源
    最近更新 更多