0

I am building my first Java library. The code uses lots of IO methods, so as you can imagine there are lots of exceptions to be caught. But I'm wondering, should I throw the exceptions? I mean surely it's the application writer's job to catch the exceptions. Because even if I catch them, I don't really know what the application would like to do in the event of this occurrence.

Should I throw IOExceptions etc, or should I catch them in the library code?

4

2 に答える 2

2

可能な場合にのみ例外を処理する必要があります。つまり、ライブラリが例外の処理方法について十分な知識を持っている場合です。

例外を処理する必要がある場合の例を次に示します。

  • ライブラリがユーザーからリクエストを受け取ります
  • ライブラリが構成ファイルを読み取ろうとします
  • 構成ファイルが見つからないため、IOException が発生します。
  • ライブラリは例外をキャッチし、デフォルトの構成を使用するようにフォールバックします (おそらく、構成ファイルがないという警告をユーザーに発行します)。

例外を処理してはならない例を次に示します

  • ライブラリがユーザーからリクエストを受け取ります
  • リクエストの文字列から整数を解析しようとすると、リクエストの処理が失敗する (NumberFormatException を取得する)
  • ライブラリは例外を処理できません - デフォルト値 (0 など) を想定するのは危険です
  • ユーザーが処理できるように、例外がユーザーにスローされます

ユーザーに例外をスローする場合は、例外をキャッチして再スローすることをお勧めします。これにより、独自のカスタム例外クラスでラップし、メッセージや詳細などを追加できる可能性があります。

一般に、優れたソフトウェア コンポーネントを作成したい場合は、フェイルファスト動作が必要であることを覚えておいてください。疑わしい場合は、不健全な方法で続行するのではなく、失敗して (例外を介して) ユーザーに通知する必要があります。

于 2012-09-14T05:23:09.287 に答える
0

はい、それは一般的な方法です。ただし、特定のメソッドが実行時に発生する可能性のある適切な例外をできるだけすべてスローするようにしてください。それに加えて、Effective Java - Second Edition Item 62 - 「各メソッドによってスローされたすべての例外を文書化する」によると。今後の次のプロジェクトで作業中のライブラリをいつ再利用したり、含めたりするかはわかりません。

詳細については、本書の第 9 章をお読みください。

于 2012-09-14T04:53:27.830 に答える