一个 Web 服务返回了一个巨大的 XML,我需要访问其中深度嵌套的字段。例如:
return wsObject.getFoo().getBar().getBaz().getInt()
问题在于getFoo()
、getBar()
和getBaz()
可能会返回null
。
然而,如果我在所有情况下都检查null
,代码将变得非常冗长且难以阅读。此外,我可能会错过某些字段的检查。
if (wsObject.getFoo() == null) return -1;
if (wsObject.getFoo().getBar() == null) return -1;
// maybe also do something with wsObject.getFoo().getBar()
if (wsObject.getFoo().getBar().getBaz() == null) return -1;
return wsObject.getFoo().getBar().getBaz().getInt();
写这样的东西是否可以接受?
try {
return wsObject.getFoo().getBar().getBaz().getInt();
} catch (NullPointerException ignored) {
return -1;
}
那样做是否被视为反模式?
null
检查,因为wsObject.getFoo().getBar().getBaz().getInt()
已经是代码异味了。请阅读"德米特法则",并根据其进行重构。然后null
检查的问题也将解决。考虑使用Optional
。 - Tomwsdl2java
生成的,它不遵循"迪米特法则"。 - Adrian Cox