比较这两种方法:
void foo() throws SomeSuperException {
try {
//...
} catch (SomeSuperException e) {
if (e instanceof SomeSubException) {
throw e;
}
}
}
void bar() throws SomeSubException {
try {
//...
} catch (SomeSuperException e) {
if (e instanceof SomeSubException) {
throw (SomeSubException) e;
}
}
}
除了方法签名(栏可以声明throws SomeSubException
而不是throws SomeSuperException
),这两种方法之间是否存在实际差异?
要明确:我知道这是一种可怕的异常处理方法,不应该这样做!
答案 0 :(得分:3)
不同之处在于,在第一种情况下,外部调用者不知道您的特定SomeSubException
,因此在翻译时会丢失一些细节。
答案 1 :(得分:1)
没有(大)差异。 从平常起,它是抛出最具体异常的最佳选择, 没有超级或更广泛的。这允许您在覆盖的catchBlock中处理更多情况。