我正在寻找使用复杂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") : "");
怎么可以
答案 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"));