比较这两种方法:
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
)之外,这两种方法之间是否还有实际区别?需要明确的是:我知道这是异常处理的可怕方法,不应该这样做!
最佳答案
区别在于,在第一种情况下,外部调用者不了解您的特定SomeSubException
,因此翻译中会丢失一些细节。