1

どうにかしてこのコード ブロックをメソッドに含めることはできますか

        if (!printStackTrace_printed) {
            ex.printStackTrace();
            printStackTrace_printed=true;
        }
        logStoreException(ex);
        throw new Exception(ex.getMessage());

各catchブロック内で呼び出し、正しい引数exまたはnpeを渡します

    catch (RationalTestException ex) {
        if (!printStackTrace_printed) {
            ex.printStackTrace();
            printStackTrace_printed=true;
        }
        logStoreException(ex);
        throw new Exception(ex.getMessage());

    } 
    catch (NullPointerException npe) {
        if (!printStackTrace_printed) {
            npe.printStackTrace();
            printStackTrace_printed=true;
        }
        logStoreException(npe);
        throw new Exception(npe.getMessage());

    }   
    catch (Exception ex) {
        if (!printStackTrace_printed) {
            ex.printStackTrace();
            printStackTrace_printed=true;
        }
        logStoreException(ex);
        throw new Exception(ex.getMessage());
    } 
4

2 に答える 2

3

最後の catch でキャッチしていてException、すべての catch ブロックが同一であるため、プログラムに影響を与えずに他の 2 つの catch ブロックを完全に削除できます。

違いがない理由は、それNullPointerExceptionが のサブクラスでExceptionあるため、キャッチすると、try ブロックでスローされた他の例外Exceptionもキャッチされます。NullPointerException


Exception一般に、サーバー呼び出しの最上位レベルを除いて 、キャッチはアンチパターンと見なされることに注意してください。

于 2012-11-25T23:35:31.200 に答える
0

これらの catch ブロックのすべてではなく 1 つしか入力できないため、「printStackTrace_printed」ブール値はまったく必要ありません。一般に、1 つの例外をキャッチして別の例外をスローすることもお勧めできませんが、それを行う理由がある場合は、他の 2 つではなく、例外をキャッチするだけで済みます。したがって、あなたの質問はほとんど消えます。

于 2012-11-26T03:20:59.007 に答える