【发布时间】:2014-07-03 12:44:34
【问题描述】:
如果我有一个抛出未经检查的异常的方法,例如:
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 会很有用的原因是:
- 它报告了一个您在调用该方法时可能会遇到的问题。
简而言之,我认为throws 是不必要的,但是通过@throws 的javadoc 描述很有用。我很想知道其他人对此的看法。
【问题讨论】:
-
希望这个帖子对这个问题有所帮助 - Exception handling as per Java coding standards
标签: java exception unchecked-exception