0

比较这两种方法:

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;
        }
    }
}

除了方法签名( bar 可以声明throws SomeSubException而不是throws SomeSuperException),这两种方法之间有什么实际区别吗?

需要明确的是:我知道这是一种可怕的异常处理方法,不应该这样做!

4

2 回答 2

3

不同之处在于,在第一种情况下,外部调用者不知道您的具体SomeSubException信息,因此在翻译中会丢失一些细节。

于 2012-04-27T12:48:36.103 回答
1

不,没有(大)差异。从普通开始,抛出最具体的异常是最好的选择,而不是超级或更广泛的异常。这允许您在覆盖的 catchBlock 中处理更多情况。

于 2012-04-27T12:49:28.793 回答