“throws Exception”是一种不好的编程实践吗?

12

我正在为同事审核代码,其中遇到了类似于以下的代码:

public X Foo1(Y y) throws Exception {
    X result = new X(y);
    result.Foo2();
    return result;
}

我认为没有必要使用throws Exception部分,但我很难证明这一点。如果更具体地指定异常类型(例如FileNotFoundNoMemory等),那么可能会有意义,但就目前而言,我认为这是不必要的。能否有人给我一些原因,说明这可能会造成什么问题,以及为什么这是不好的做法?或者这段代码是可以的吗?

3个回答

32
throws声明是方法的一部分合约,定义合约时应当尽可能精确。因此,使用throws Exception是不好的做法。这与在方法保证返回字符串的情况下声称其返回值为Object是同样错误的做法有相同的原因。
此外,方法调用者必须捕获Exception(除非他想传播这种丑陋),而捕获Exception也是不好的做法。请参见以下问题的答案:Is it a bad practice to catch Throwable?

3
+1 我可以想出几个实际的原因,但这个回答包含了它们全部。 - MByD

4

这会强制每个使用该方法的人都处理抛出的异常。

即使你喜欢使用受检查的异常(我不喜欢),这也不会给你任何关于可能发生的错误类型信息,所以你无法以有意义的方式处理它。


0

Throws声明的意思是: - 在你的方法内部可能会产生这种已检查异常 - 你的方法无法或不愿意处理它

你应该使用最具体的异常,并抵制将不相关的异常分组以减少throws声明数量的诱惑。如果你觉得有太多的throws声明,那么你的方法就过于复杂,应该将其拆分成更小、更易管理的方法。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接