Джошуа Блох в своей Эффективной Java пишет:
"Используйте тег Javadoc @throws для документирования каждого неконтролируемого исключения, которое метод может бросать, но не используйте ключевое слово throw для включения unchecked исключения в объявлении метода. "
Ну, это звучит разумно, но как узнать, какое неконтролируемое исключение может вызвать мой метод?
Подумайте о следующем классе:
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 не очень помогает мне и никому не помогает. Поскольку я не знаю никаких инструментов для этого...
Как вы справляетесь с такой ситуацией?