是“抛出异常”不好的做法?
问题描述:
我审查一个同事的代码和我遇到类似这样的一段代码:是“抛出异常”不好的做法?
public X Foo1(Y y) throws Exception {
X result = new X(y);
result.Foo2();
return result;
}
我认为没有必要为throws Exception
一部分,但我有困难证明这一。这可能是有道理的,如果它更具体Exception
(FileNotFound
,NoMemory
等),但因为它是我认为这是没有必要的。有人能给我一些原因,这可能导致什么问题,为什么这是不好的做法?或者这段代码好吗?
答
throws
声明是方法合同的一部分。在定义合同时,应始终尽可能精确地为。因此说throws Exception
是一个坏主意。
由于同样的原因,不好的做法是说一个方法在返回String
时返回Object
。此外,该方法的调用者必然要赶上Exception
(除非他想传播这种丑陋),并且捕捉Exception
也是一个坏主意。请参阅此问题的答案:Is it a bad practice to catch Throwable?
答
这会强制每个使用此方法的人处理抛出的异常。
即使你喜欢使用检查过的异常(我不这样做),这会让你根本没有任何信息可能会出现什么样的错误。所以你不能真正以有意义的方式处理它。
答
抛出声明表示: - 你的方法里面的东西可能会产生这样的检查的异常 - 你的方法是不能或不愿对付它
您应使用最具体的异常,抵制诱惑,不相关的组减少抛出声明数量的异常。如果你觉得它们太多,那么你的方法过于复杂,应该分解成更小的更易于管理的方法。
+1我可以想到几个实际的原因,但是这个答案包含了所有这些。 – MByD