这是来自 Effective java 的引用。
“在可能的情况下,处理来自较低层的异常的最佳方法是避免它们,通过确保较低级别的方法成功。有时您可以通过在将较高级别方法的参数传递给较低级别之前检查较高级别方法的参数的有效性来做到这一点层。”
考虑一个名为“AccessControlContext actx”的对象,它从处理程序传播到较低级别。我们可以对“actx!= null”进行更高级别的检查,但是否需要再次在较低级别进行检查?
例如在伪代码中:
class RestServlet {
void verify Servlet(AccessControlContext actx) {
// check made at higher level according to effective java
if (actx == null) { throw exception; }
// do something
Verify.checkAccessControl(actx); // calling lower leve
// do something
}
}
class Verify {
static checkAccessControl(actx) {
// DO I NEED NULL POINTER CHECK HERE AGAIN ?
}
}
尽管问题嵌套在评论中,但要反复阐述。较低级别的冗余检查可确保防御性编码,但是 - 它是冗余的。它可能在 javadocs 中清楚地说明它不接受 null,但这并不能解决拥有无错误代码的目的。我们应该重复异常检查吗?
注意:这是一个随机示例。我的问题并不特定于这个例子。这是一个更广泛的问题,旨在了解复制异常的程度。