比较这两种方法:

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,因此翻译中会丢失一些细节。

10-04 11:54