8

重要: この質問は、Java 6 (およびそれ以下) にのみ関連しています。

ここの階層は、JavaExceptionが 2 つのタイプに分けられることを示しています:RuntimeException[not a RuntimeException] :

Java 例外階層

代わりにUncheckedExceptionandのように分割したほうがよかったのではないでしょうか? CheckedExceptionたとえば、次のステートメントにはかなりの数のチェック例外があります。

try {
    transaction.commit();
} catch (SecurityException e) {
} catch (IllegalStateException e) {
} catch (RollbackException e) {
} catch (HeuristicMixedException e) {
} catch (HeuristicRollbackException e) {
} catch (SystemException e) {
}

成功するか失敗するかだけに本当に興味があるので、チェックされた例外をグループとして処理したいのですが、予期しないエラーをキャッチするのは良い習慣ではないため、チェックされていない例外は扱いません。したがって、これを念頭に置いて、次のようなことができるかもしれません。

try {
    transaction.commit();
} catch (Exception e) {
    if (e instanceof RuntimeException) {
        // Throw unchecked exception
        throw e;
    }
    // Handle checked exception
    // ...
}

しかし、これはひどくハッキーに思えます。より良い方法はありますか?

4

3 に答える 3

9

私が正しく理解していれば、あなたはほとんどそこにいます。RuntimeException をキャッチするだけです。これにより、RuntimeException と、階層内のその下のすべてがキャッチされます。次に、例外のフォールスルーで、カバーされます。

試す {
    transaction.commit();
} キャッチ (RuntimeException e) {
    // 未チェックの例外を投げる
    eを投げます。
キャッチ(例外e){
    // チェックされた例外を処理する
    // ...
}
于 2013-02-08T11:14:22.940 に答える
5

Java 7そのような構造を可能にします:

try {
    transaction.commit();
} catch (SecurityException | IllegalStateException  | RollbackException | HeuristicMixedException  e ) {
   // blablabla
}

UPD: Java の以前のバージョンでそれを行うための便利で便利な方法はないと思います。Javaそのため、言語の開発者は .NET でこのような構造を導入しましたJava 7。したがって、独自のアプローチを考案できますJava 6

于 2013-02-08T11:13:14.173 に答える