【问题标题】:Don't stop evaluation on exception?不要停止对异常的评估?
【发布时间】:2024-10-24 12:45:01
【问题描述】:

我目前在 if 语句中有很长的 OR 条件列表。但是,其中一些可能会或可能不会被初始化。

是否可以指示java忽略空指针异常并继续评估if语句中的其余条件而不是跳转到catch?

我需要在对象列表上调用一个方法来检查某个值,但有些对象可能没有被初始化。

谢谢

【问题讨论】:

  • 您应该在比较前检查每个变量是否为空:if((a != null && a == 1) || (b != null && b == 2))
  • 不,没有办法以您想要的这种方式忽略 NPE。您必须检查您的变量是否为null
  • @Jens 是的,见上文...这不会忽略异常,而是一起绕过异常
  • 感谢所有回复!我知道如何检查它是否为空...我只是希望有一种简单的方法可以忽略某些异常,因为我只是在执行评估。

标签: java pointers exception null


【解决方案1】:

是的,通过检查变量的值

if(value != null) {
   // execute code here
}

您可以捕获异常,并继续执行代码的其他线程。但是这个 if 块只会简单地执行代码,并且不会引发 NullPointerException。

但请记住,代码只有在值不为空时才会执行。如果值为 null,则代码块将被跳过

【讨论】:

    【解决方案2】:

    你的情况应该是这样的:

    if((a != null && a == 1) || (b != null && b == 2))
    

    这只是一个示例,但您应该在测试变量是否有可能为 null 之前检查 null...

    【讨论】:

      【解决方案3】:

      据我所知,没有。你也许应该考虑Null Object pattern,所以什么都不会发生,但你可以继续执行。

      一个例子:

      Object onull = new NullObject();
      Object oreal = new RealObject();
      
      if(onull.contains(xy) || oreal.contains(xy)) 
          ....
      // the onull.contains() will always return true
      // only the oreal instance will actually perform the contains check
      

      【讨论】: