Java での例外処理に関していくつか質問があります。私はそれについて少し読んで、いくつかの矛盾するガイドラインを得ました。
言及された記事を見てみましょう:
「クライアントコードが何もできない」場合、一般的にチェック例外の使用を避けるべきであると述べています。しかし、それは正確にはどういう意味ですか?GUI にエラー メッセージを表示することは、チェックされた例外を発生させる十分な理由ですか? しかし、GUI プログラマーは、潜在的なエラー情報を表示するために、RuntimeExceptions とその子孫をキャッチすることを覚えておく必要があります。
この記事で提示された 2 番目の見解は、いくつかのカスタム フィールド/メソッドを実装する場合を除き、独自の例外クラスを発明することを回避する必要があるというものです。私は一般的にこれに同意しません。今日の私の実践は正反対でした。新しいメソッドを追加せずに Exception を拡張するだけであっても、作成したクラスによって実現される目標を反映するために、独自の例外構造に例外をラップしました。スローされたときに上位層でそれらをより柔軟に処理するのに役立つと思います。また、これらのクラスを使用するプログラマーにとって、一般的により明確で理解しやすいと思います。
私は今日、いくつかのコードを「新しい方法」で実装し、記事で提示されているように、あちこちで RuntimeException をスローしてから、Sonarに分析させました。さらに混乱させるために、Sonar は私の RuntimeExceptions をメジャー エラーとしてマークし、「ルート タイプの例外をスローしないようにして、独自のタイプでラップしてください」のようなメッセージを表示しました。
かなり物議を醸しているように見えますが、どう思いますか?
また、今日の技術リーダーの 1 人から、「JVM にとって非常にコストのかかる操作であるため、例外をラップするだけでは良くない」と聞いたことがあります。私にとっては、どこでも SQLExceptions または IOExceptions をスローすることは、カプセル化を少し破るように見えます..
では、私がここで提示した質問に対するあなたの一般的な態度はどうですか?
独自の型で例外をラップするのはいつですか?これを行うべきではないのはいつですか?
「クライアントはこれについて何もできない、実行時例外をスローする」というポイントはどこにありますか? '
パフォーマンスの問題はどうですか?