2

Javaでのエラー処理に関する質問があります。ライブラリにいくつかのエラーコードがあるとします。さまざまなエラーに対して、単一の例外を作成し、その側にエラーコードの列挙型を含めることをお勧めしますか?

更新:例外内にエラーコードを含めることは良い習慣ですか?

4

4 に答える 4

4

エラーエラー コードは 2 つの別個のものです。1 つは何が起こったかを定義し、もう 1 つはエラーの特定の原因を識別します。

これの最も良い例は、DB 関連の例外です。SQL 例外には、その原因となったエラーのタイプを定義するコードが含まれています。

列挙型またはフィールドを介してそのコードにアクセスできるようにすることは、設計上の決定です。スローする例外が 1 つあり、それにエラー コードを追加すると、2 段階の例外処理と見なすことができます。

  1. エラーのコンテキストを決定する例外をキャッチする
    • 安全
    • データベース
    • 処理
    • 解析中
    • 無効な操作
  2. 例外コードをチェックしてソースを特定します
    • ユーザーには、実行しようとしたことを実行するための十分な権限がありません
    • データベース接続エラーa
    • クエリ関連の問題
    • システムは現在過負荷です
    • 特定の操作のマネージャーが見つかりません

ソース (コード) を特定し、そのコンテキスト (例外) を把握したら、それに応じて行動できます。IMHO、階層は、必要に応じてコードで拡張できる優れたアプローチです。ソースを表すためだけに例外を 10 回サブクラス化すると、保守性と複雑さに影響があることに注意してください。

于 2013-03-06T16:20:31.960 に答える
3

あまり。エラータイプごとに1つずつ、異なる例外タイプを使用する必要があります(妥当な制限内で、何百もの異なる例外タイプを作成しないでください!)。

各例外を処理して何が起こったかを検出する代わりに、本当にキャッチしたいものだけをキャッチできます。

ただし、同じタイプのいくつかの例外内のエラーの原因を明確にするために、例外メッセージを自由にカスタマイズしてください。

この簡単な説明は明らかです。

于 2013-03-06T16:18:36.463 に答える
2

現在のプラクティスには、少なくとも 1 つの基本クラス (IOException) と、FileNotFoundException、UnsupportedEncodingException などの子クラスがあります。使用側では、IOException ですべてをキャッチできます。

これにより、FileNotFound だけに取り組むことができます。

一方、HTTP 応答コードのように多くのコードがある場合、例外を 1 つだけにするというアプローチは正当化されます。

于 2013-03-06T16:20:23.720 に答える
2

エラー コードが多すぎて、ユーザーがキャッチして回復することを期待できない場合は、整数エラー コードを埋め込んだ 1 つの例外タイプを使用しても問題ありません。また、コンパイル時に一連のエラー コードを特定できない場合、選択の余地はありません。

于 2013-03-06T16:20:56.790 に答える