我正在审查同事的代码,我遇到了一段类似于此的代码:
public X Foo1(Y y) throws Exception {
X result = new X(y);
result.Foo2();
return result;
}
我认为throws Exception
部分没有必要,但我很难证明这一点。如果它更具体Exception
(FileNotFound
,NoMemory
等可能是有意义的,但我认为这是不必要的。有人可以告诉我一些可能导致问题的原因以及为什么这是不好的做法?或者这段代码好吗?
答案 0 :(得分:27)
throws
声明是方法合同的一部分。在定义合同时,您应始终保持精确。因此说throws Exception
是一个坏主意。
由于同样的原因,当一个方法在保证返回Object
时返回String
是不好的做法,这是不好的。
此外,该方法的调用者必须捕获Exception
(除非他想传播这种丑陋),并且捕获Exception
也是一个坏主意。请参阅此问题的答案:Is it a bad practice to catch Throwable?
答案 1 :(得分:4)
这会强制每个人使用此方法来处理抛出的异常。
即使您喜欢使用已检查的异常(我没有这样做),这也不会让您了解哪些内容可能出错。所以你无法以有意义的方式处理它。
答案 2 :(得分:0)
抛出声明意味着: - 您方法中的某些内容可能会产生此类检查异常 - 你的方法无法或不愿意处理它
您应使用最具体的异常,并抵制将不相关的异常分组以减少抛出声明数量的诱惑。如果你觉得它们太多了,那么你的方法过于复杂,应该被分解成更小的更多管理方法