声明方法引发未经检查的异常是否有好处?
如果我有一个方法抛出一个未经检查的异常,例如:
void doSomething(int i) {
if (i < 0) throw new IllegalArgumentException("Too small");
// ...
}
显式声明该方法引发异常是否有任何好处,即
void doSomething(int i) throws IllegalArgumentException {
if (i < 0) throw new IllegalArgumentException("Too small");
// ...
}
与(或补充)描述javadoc中的行为相反:
/**
* This method does something useful.
* @param i some input value
* @throws IllegalArgumentException if {@code i < 0}
*/
void doSomething(int i) {
if (i < 0) throw new IllegalArgumentException("Too small");
// ...
}
我声称拥有它们没有用的原因是:throws
-
throws
没有提供关于将引发异常的情况的信息,仅提供可能引发异常的信息; - 因为它是一个未经检查的异常,所以我不会被迫在调用代码中处理异常。我只会真正知道,如果我去看看实施,它可能会被抛出
doSomething
; - 的正文可能会调用引发其他类型的未经检查的异常的代码;声称“这种方法投掷”似乎只是讲述了故事的一部分,可能;
doSomething
IllegalArgumentException
- 如果该方法是非最终的,则可以重写它,以便声明新实现以引发其他未经检查的异常;你不知道你调用的是哪个实现。
我声称拥有这些会很有用的原因是:throws
- 它报告了您在调用该方法时可能合理预期会遇到的问题。
简而言之,我认为这是不必要的,但是通过javadoc描述是有用的。我很想知道其他人对此的看法。throws
@throws