Joshua Bloch在他的《Effective Java》一书中写道:
"使用Javadoc @throws标记记录方法可能抛出的每个未检查异常,但不要使用throws关键字将未检查的异常包含在方法声明中。"
这听起来确实是合理的,但是如何找出我的方法可能抛出哪些未检查的异常呢?
让我们考虑一个以下的类:
public class FooClass {
private MyClass[] myClass;
/**
* Creates new FooClass
*/
public FooClass() {
// code omitted
// do something with myClass
}
/**
* Performs foo operation.<br />
* Whatever is calculated.
* @param index Index of a desired element
* @throws HorribleException When something horrible happens during computation
*/
public void foo(int index) {
try {
myClass[index].doComputation();
} catch (MyComputationException e) {
System.out.println("Something horrible happened during computation");
throw new HorribleException(e);
}
}
}
现在我已经记录下了HorribleException异常,但很明显foo方法也可能会抛出未检查的java.lang.ArrayIndexOutOfBoundsException异常。随着代码变得越来越复杂,想到方法可能抛出的所有未检查异常越来越困难。我的IDE和其他工具都没有什么帮助。既然我不知道任何工具可以做到这一点...
你如何处理这种情况?
throw new HorribleException("index=" + index, e)
。堆栈跟踪中包含的信息越多,就越好。 - Thorbjørn Ravn Andersen