3 回答

TA贡献2041条经验 获得超4个赞
我建议考虑Objects.requireNonNull(T obj, String message)。您可以使用每个异常的详细消息来构建链,例如
requireNonNull(requireNonNull(requireNonNull(
wsObject, "wsObject is null")
.getFoo(), "getFoo() is null")
.getBar(), "getBar() is null");
我建议您不要使用特殊的返回值,例如-1。那不是Java风格。Java设计了异常机制来避免这种来自C语言的老式方式。
投掷NullPointerException也不是最好的选择。您可以提供自己的异常(将其选中以保证将由用户处理,或者不选中以进行更轻松的方式对其进行处理)或使用您正在使用的XML解析器中的特定异常。

TA贡献1790条经验 获得超9个赞
假设情况确实如此,假设类结构确实不受我们的控制,我认为按照问题中的建议抓住NPE确实是一个合理的解决方案,除非性能是主要问题。一个小的改进可能是包装throw / catch逻辑以避免混乱:
static <T> T get(Supplier<T> supplier, T defaultValue) {
try {
return supplier.get();
} catch (NullPointerException e) {
return defaultValue;
}
}
现在,您可以简单地执行以下操作:
return get(() -> wsObject.getFoo().getBar().getBaz().getInt(), -1);
添加回答
举报