チェック例外に対する
長年にわたり、私は次の質問に対して満足のいく答えを得ることができませんでした: なぜ一部の開発者はこれほど反対しているのかチェックされた例外に?私は多くの会話を交わし、ブログ投稿を読み、Bruce Eckel (チェック例外に最初に反対した人) の意見を読みました。
私は現在、いくつかの新しいコードを書いており、例外がどのように処理されるかに非常に注意を払っています。 「チェック例外は好きではない」という意見を理解しようと努めていますが、まだ理解できません。
これまでの会話はすべて、同じ未解決の質問で終わりました...詳しく説明しましょう:
一般に (Java の設計により)、
私がよく聞く議論は、例外が発生した場合、開発者はプログラムを終了するだけでよいというものです。
私がよく耳にするもう 1 つの議論は、チェック例外によりコードのリファクタリングが難しくなるというものです。
「やめます」引数の場合、たとえやめたとしても、適切なエラー メッセージを表示する必要があります。エラー処理を先延ばしにするだけでは、明確な終了理由がないままプログラムが終了したときにユーザーはあまり満足しません。
「リファクタリングが難しくなる」という意見は、適切な抽象化レベルが選択されていないことを示しています。 IOException をスローするメソッドを宣言するのではなく、IOException を、何が起こっているかにより適切な例外に変換する必要があります。
Main の catch(Exception) (または、場合によってはプログラムが正常に終了するようにする catch(Throwable) のラップに夢中になることはありませんが、必要な例外を常にキャッチします。これにより、少なくとも適切なエラー メッセージを表示してください
人々が決して答えない質問は次のとおりです:
Exception
サブクラスの代わりに RuntimeException
サブクラスをスローする場合、
が何をキャッチすべきかをどうやって知ることができるでしょうか?
答えが例外をキャッチすることである場合、プログラマ エラーをシステム例外と同じ方法で処理していることになります。それは私には間違っているように思えます。
Throwable をキャッチした場合でも、システム例外と VM エラー (および同様のエラー) を同じ方法で処理します。それは私には間違っているように思えます。
その答えが、スローされたことがわかっている例外のみをキャッチすることである場合、どの例外がスローされたかをどうやって知ることができるでしょうか?プログラマー X が新しい例外をスローし、それをキャッチするのを忘れた場合はどうなるでしょうか?私の意見では、これは危険です。
スタック トレースを表示するメッセージは間違っていると思います。チェック例外が嫌いな人はそう思いませんか?
では、チェック例外が気に入らない場合は、その理由を説明して、未回答の質問に答えてください。
どちらのモデルをいつ使用するかについてのアドバイスを求めているわけではありません。なぜ人々は RuntimeException から拡張し、Exception から拡張しないのか、および/ またはを探しています。メソッドにスローを追加するのではなく、例外をキャッチした後に RuntimeException を再スローする理由。チェック例外を好まない人々の動機を理解したいと思っています。
以上がなぜ開発者は Java のチェック例外に反対するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。