もちろん、例外はあなたが考える適切なレベルで適切に処理する必要があります。チェックされた例外をどう処理すればよいかわからず、それを適切なカスタムのチェックされていない例外でラップして、最上位まで伝播するとします (そのラップされた例外やその他の可能性のあるチェックされていない例外を何らかの媒体で処理しないと想定されています)。元の例外が発生したレベルから離れてレベルアップします(方法を知りたくない、または知らないため))。さらに進んで、すべての未処理の例外 (未チェックおよびチェック済み、未チェックでラップされたもの) が最上位 (メイン メソッド、webapp のコントローラーなど) に達しました。もちろん、私は何かをする必要があります。私がやりたいことは、ログ エントリを使用して何かが間違っていることを開発者に通知し、ユーザーに彼の要求ができることを伝えることだけです。正しく処理されない (その例外に適切なメッセージに応じて異なるメッセージを使用する)。そのために、私はキャッチブロックで使用しますRuntimeException
(カスタムのチェックされていない例外をキャッチした場合は、ユーザーに「重大な問題が発生しました」などのメッセージを送信します。そのようなカスタムのチェックされていない例外がキャッシュされる可能性はゼロより大きいため、それについて連絡する必要があります)。一部の記事 (最初、2 番目) catch ブロックでスーパー タイプによってサブクラスのインスタンスをキャッチしないようにアドバイスします (または、チェック済みの例外にのみ関連していますか?)。catch ブロックで正確な種類の例外を使用すると、チェックされていない例外を見落とし、アプリケーションがクラッシュします (もちろん、ログを記録してユーザーに通知する catch ブロックには重複したコード スニペットが存在します)。例として、jsp 変換フェーズで構築され、スーパー タイプを使用してそのスーパータイプのサブクラスのインスタンスをキャッチするスニペットを提供できます。
// some code
try {
// body of translated JSP here...
} catch (Exception e) {
out.clear();
pageContext.handlePageException(e);
}
// some code
私の質問:この概念はRuntimeException
、開発者にすべての問題を報告し、発生したすべての問題についてユーザーに伝えるために、最上位の catch ブロックで使用するのに正しいですか? もちろん、この場合の例外処理は、問題が発生したことを開発者とユーザーに通知するだけであり、回復戦略はありません。その概念を例外処理と呼ぶのは難しいかもしれません。私を修正してください。その概念についてのアイデアに感謝します。