允许空指针异常广告的最佳方法是覆盖它

时间:2017-10-04 11:57:28

标签: java error-handling nullpointerexception

我正在寻找使用复杂xml对象中的某些值填充对象。为了获得正确的价值,我必须通过一个大的元素链,我必须检查所有不是为空。所以我的代码看起来像这样X次9次。我不想因为缺少一个元素而停止填充过程,我想以某种方式“跳过”空指针并进入下一个适当的位置。我唯一的想法是将每一行都放在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") : "");

怎么可以

2 个答案:

答案 0 :(得分:4)

您可以将其包装在Optional中并隐式处理空值:

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

答案 1 :(得分:0)

要按字面意思回答您的问题,您可以在单独的方法中提取它并捕获潜在的异常。但这不是最佳做法:

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

您可以这样调用(值可能为null):

Object value = getValueOrNull(() -> obj.getObject("YYY").getArray("gob").getObject(0).getString("gobValue"));