是"抛出异常"的坏习惯吗?

Can*_*ner 10 java

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

public X Foo1(Y y) throws Exception {
    X result = new X(y);
    result.Foo2();
    return result;
}
Run Code Online (Sandbox Code Playgroud)

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

aio*_*obe 27

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

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

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

  • +1我可以想到几个实际的原因,但这个答案包含了所有这些原因. (3认同)