SQLExceptionがチェックされた例外であることは誰もが知っています。ほとんどの人は、チェックされた例外が冗長であり、スロー/キャッチ汚染につながることに同意しています。
SQLExceptionのスローを回避するには、どのアプローチを選択する必要がありますか?どのラッパー/テクニック/ライブラリが推奨されますか?(たとえば、Springの人々のためのDataAccessExceptionですが、Springは使いたくありません)
SQLExceptionがチェックされた例外であることは誰もが知っています。ほとんどの人は、チェックされた例外が冗長であり、スロー/キャッチ汚染につながることに同意しています。
SQLExceptionのスローを回避するには、どのアプローチを選択する必要がありますか?どのラッパー/テクニック/ライブラリが推奨されますか?(たとえば、Springの人々のためのDataAccessExceptionですが、Springは使いたくありません)
としてラップするだけnew RuntimeException(jdbce)
です。または、ランタイム例外を拡張する独自の例外を定義して使用します。ここではフレームワークは必要ないと思います。Springでさえ、必要になるたびにチェックを外して、チェックされた例外をラップします。
チェックされた例外をチェックされていない例外として扱いたい場合は、次のことができます。
Java7まではあなたができる
} catch(SQLException e) {
Thread.currentThread().stop(e);
}
ただし、Java8では次のことができます
/**
* Cast a CheckedException as an unchecked one.
*
* @param throwable to cast
* @param <T> the type of the Throwable
* @return this method will never return a Throwable instance, it will just throw it.
* @throws T the throwable as an unchecked throwable
*/
@SuppressWarnings("unchecked")
public static <T extends Throwable> RuntimeException rethrow(Throwable throwable) throws T {
throw (T) throwable; // rely on vacuous cast
}
と電話
} catch(SQLException e) {
throw rethrow(e);
}
チェックされた例外はコンパイラー機能であり、実行時に異なる方法で処理されることはありません。