0

これら2つの方法を比較してください。

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)以外に、2つのメソッドの間に実際的な違いはありますか?

明確にするために:これは例外処理への恐ろしいアプローチであり、実行すべきではないことを認識しています。

4

2 に答える 2

3

違いは、最初のケースでは、呼び出し元が外部的に特定SomeSubExceptionの について知らないため、翻訳で詳細が失われることです。

于 2012-04-27T12:48:36.103 に答える
1

いいえ、(大きな)違いはありません。通常から、最も具体的な例外をスローするのが最良の選択であり、スーパーまたはより広範な例外ではありません。これにより、オーバーレイする catchBlock でより多くのケースを処理できます。

于 2012-04-27T12:49:28.793 に答える