Java 允许空指针异常并克服它的最佳方法

Java 允许空指针异常并克服它的最佳方法,java,error-handling,nullpointerexception,Java,Error Handling,Nullpointerexception,我希望用复杂xml对象中的一些值填充对象。为了得到正确的值,我必须通过一个大的元素链,我必须检查它们是否都为null。所以我的代码看起来像这样x9倍。我不想仅仅因为缺少一个元素就停止填充过程,我想以某种方式“跳过”空指针并转到下一个适当的位置。我唯一的想法是把每一条线都放在一个try/catch块中。有更好的主意吗?谢谢 objModel.setProviderHeadquarterName(obj.getObject("YYY") != null && obj.getObjec

我希望用复杂xml对象中的一些值填充对象。为了得到正确的值,我必须通过一个大的元素链,我必须检查它们是否都为null。所以我的代码看起来像这样x9倍。我不想仅仅因为缺少一个元素就停止填充过程,我想以某种方式“跳过”空指针并转到下一个适当的位置。我唯一的想法是把每一条线都放在一个try/catch块中。有更好的主意吗?谢谢

objModel.setProviderHeadquarterName(obj.getObject("YYY") != null && obj.getObject("YYY").getArray("gob") != null && obj.getObject("YYY").getArray("gob").size() > 0 && obj.getObject("YYY").getArray("gob") != null ? obj.getObject("YYY").getArray("gob").getObject(0).getString("gobValue") : "");
objModel.setProviderHeadquarterName(obj.getObject("XXX") != null && obj.getObject("XXX").getArray("tem") != null && obj.getObject("XXX").getArray("tem").size() > 0 && obj.getObject("XXX").getArray("tem") != null ? obj.getObject("XXX").getArray("tem").getObject(0).getString("temValue") : "");
objModel.setProviderHeadquarterName(obj.getObject("ZZZ") != null && obj.getObject("ZZZ").getArray("has") != null && obj.getObject("ZZZ").getArray("has").size() > 0 && obj.getObject("ZZZ").getArray("has") != null ? obj.getObject("ZZZ").getArray("has").getObject(0).getString("hasValue") : "");
您如何将其包装在一个容器中并隐式处理空值:

Optional.of(obj).map(o -> o.getObject("YYY")).map(o -> o.getArray("gob")) /* [snip] */
        .orElse(""); //etc
您可以将其包装在一个容器中,并隐式处理空值:

Optional.of(obj).map(o -> o.getObject("YYY")).map(o -> o.getArray("gob")) /* [snip] */
        .orElse(""); //etc

要从字面上回答您的问题,您可以用一个单独的方法提取它并捕获潜在的异常。但这不是最佳实践:

private static Object getValueOrNull(Supplier<Object> s) {
  try {
    return s.get();
  } catch (Exception e) { //narrow down the exception if possible
    return null;
  }
}

要从字面上回答您的问题,您可以用一个单独的方法提取它并捕获潜在的异常。但这不是最佳实践:

private static Object getValueOrNull(Supplier<Object> s) {
  try {
    return s.get();
  } catch (Exception e) { //narrow down the exception if possible
    return null;
  }
}

不要写那种代码。如果XML对象不能容忍空值,则不允许将其添加到集合中。XML是一种分层数据表示,因此递归应该是您的朋友。可能是的重复。不要编写该代码。如果XML对象不能容忍空值,则不允许将其添加到集合中。XML是一种分层数据表示形式,因此递归应该是您的朋友。在这种情况下,可能重复.Or
Optional.ofNullable(obj.getObject(“YYY”)…
Optional.ofNullable(obj.getObject(“YYY”)…
我只会捕捉到NPE。很容易接受我们实际需要处理的其他异常。@JoeC我认为代码也可能抛出ArrayIndexOutOfBoundsException。所以我把它放宽了,并在代码中加了一条注释,说如果可能的话,应该缩小异常类型的范围。很容易接受我们实际需要处理的其他异常。@JoeC我认为代码也可能抛出ArrayIndexOutOfBoundsException。所以我把它放宽了,并在代码中添加了一条注释,说如果可能的话,应该缩小异常类型的范围。