捕获NullPointerException的替代方法

Vik*_*ram 3 java nullpointerexception

我最近知道使用trycatch阻止NullPointerExceptions是一种不好的做法.

如果是这样,那么我有以下问题:

  1. 为什么这是一个不好的做法?
  2. 捕捉的有哪些替代方案NullPointerException

Phi*_*ipp 8

当您在特定情况下希望抛出NPE的代码段周围添加try/catch块时,您可能会无意中忘记该代码使用的另一个对象,该对象也可能为null并导致其中一个对象.然后,当您添加代码以对catch块中的预期NPE做出反应时,代码也将在意外的NPE上执行.这将最多输出误导性错误消息,并在最坏情况下导致完全意外的程序行为.

一个例子:

try {
    ThingamabobFactory.getInstance().createThingamabob(ThingamabobFactory.getDefaults()).thingamabobify();
} catch(NullPointerException e) {
      // so... which of the above method calls did return null?
      // ...or was the NPE even thrown INSIDE one of these methods??
}
Run Code Online (Sandbox Code Playgroud)

因此,当您希望某个对象在某些情况下为空并且您想要处理此情况时,请通过检查if (object == null)以避免任何误报来执行此操作.