今天我遇到了以下情况:(“伪代码”)
现在,如果调用者使用包含
对于正面方面,我认为额外的检查可以提供更高级别的诊断信息。而且尽早失败总是一件好事。
对于反面方面,我会问自己:“如果我这样做,难道我不应该验证传递到编程语言核心API的每个参数并抛出完全相同的异常吗?”
有没有什么经验法则,可以让我们在何时尽早抛出异常,何时让被调用者抛出异常?
class MyClass {
public void workOnArray(Object[] data) {
for (Object item : data) {
workOnItem(item);
}
}
public void workOnItem(Object item) {
if (item == null) throw new NullPointerException();
}
}
现在,如果调用者使用包含
null
项的数组调用workOnArray
,由于workOnItem
,调用者将会收到NullPointerException
。但是我可以在workOnArray
中插入一个额外的检查,换句话说,问题可以更早地被发现。(请注意,这只是一个简单的例子,在实际应用程序中,这可能不太明显)。对于正面方面,我认为额外的检查可以提供更高级别的诊断信息。而且尽早失败总是一件好事。
对于反面方面,我会问自己:“如果我这样做,难道我不应该验证传递到编程语言核心API的每个参数并抛出完全相同的异常吗?”
有没有什么经验法则,可以让我们在何时尽早抛出异常,何时让被调用者抛出异常?