在Java中重新抛出时抛出异常

时间:2012-04-27 12:44:49

标签: java exception exception-handling casting

比较这两种方法:

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),这两种方法之间是否存在实际差异?

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

2 个答案:

答案 0 :(得分:3)

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

答案 1 :(得分:1)

没有(大)差异。 从平常起,它是抛出最具体异常的最佳选择, 没有超级或更广泛的。这允许您在覆盖的catchBlock中处理更多情况。