Exceptionのサブクラスをスローするメソッドがあります。Exceptionのサブクラスごとに同じcatch機能を実行している場合、それはExceptionsクラスをキャッチするのは悪い習慣ですか、それとも各例外を個別にキャッチする必要がありますか?
5 に答える
はい、それは悪い習慣です。なぜなら、catchブロックがキャッチされるべきではないランタイム例外をキャッチするからです。
Java 7を使用している場合は、
catch (SomeException | SomeOtherException | YetAnotherException e) {
...
}
Exception
1つのcatchブロックですべてを使用してすべての例外をキャッチするだけでなく、発生する可能性のある例外(サブクラス)をキャッチすることを常にお勧めします。これが1つのリファレンスです。
コードによってスローされた予期しない実行(たとえば、実行時の実行)に対して同じ機能を実行できる場合は、問題ありません。
それ以外の場合は、サブクラスをキャッチすることをお勧めします。
NullPointerException
コードの一部が?を投げたらどうなるか考えてみてください。
はい、Exceptionクラスをキャッチして例外をスケルチすることは悪い習慣です。例外は、問題レポートをハンドラーに送信するように設計されており、これを行うと、重大なエラーが隠される可能性があります。
ある時点で、例外を処理する必要があります。したがって、アプリケーション内にすべての例外を処理(キャッチ)する場所があることを願っています。通常、これは、アプリケーションの完全なクラッシュを防ぎ、代わりにユーザーへの言い訳メッセージとともに回復のパスを提供するために、予期しない例外がキャッチされる場所です。一般に、クラスでは、予想される失敗を処理し、クラスとメソッドが呼び出し元に提供するコントラクトを信頼します。たとえば、データベースからID文字列でレコードをフェッチするメソッドでは、SQL例外のみをキャッチします。これは、契約でnullIDは許可されないと明確に規定されている場合があるためです。不正な入力例外を呼び出し元にスローバックします。そうしないと、ユーザー入力を間違ったレベルで検証してしまう可能性があります。