是“抛出exception”的坏习惯吗?

我正在审查同事的代码,我遇到了一段类似于此的代码:

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

我相信没有必要throws Exception部分,但我很难certificate这一点。 如果它是更具体的ExceptionFileNotFoundNoMemory等)可能是有意义的,但我认为这是不必要的。 有人可以告诉我一些可能导致问题的原因以及为什么这是不好的做法? 或者这段代码好吗?

throws声明是方法契约的一部分。 在定义合同时,您应该始终尽可能精确 。 说throws Exception是一个坏主意。

由于同样的原因,当一个方法保证返回一个String时返回一个Object是不好的做法。

此外,该方法的调用者必须捕获Exception (除非他想传播这种丑陋),并且捕获Exception也是一个坏主意。 看看这个问题的答案: 抓住Throwable是不好的做法?

这迫使每个人使用此方法来处理抛出的exception。

即使您喜欢使用已检查的exception(我没有这样做),这也不会让您了解哪些内容可能出错。 所以你无法以一种有意义的方式处理它。

抛出声明意味着: – 您的方法中的某些内容可能会产生这样的检查exception – 您的方法无法或不愿意处理它

您将使用最具体的exception,并抵制将不相关的exception分组以减少抛出声明数量的诱惑。 如果您觉得它们太多了,那么您的方法过于复杂,应该分解为更小的更多管理方法