web-dev-qa-db-ja.com

スロー仕様で未チェックの例外を宣言する必要がありますか?

チェック済みの例外は処理または指定する必要があることは承知していますが、チェックなしの例外はオプションです。

なんらかの理由で、チェックされていない例外がメソッドで発生すると合理的に期待できる場合、それをスロー仕様に追加する必要がありますか?または、仕様をできるだけ短くする必要がありますか?

28
mafu

なんらかの理由で、チェックされていない例外がメソッドで発生すると合理的に期待できる場合、それをスロー仕様に追加する必要がありますか?

未チェックの例外はプログラミングエラーを示すため、throws句での宣言は避けてください。一般に、プログラムの最高レベルを除いて、これらの例外のキャッチは試みるべきではありません。このルールにはいくつかの例外があります(しゃれが意図されています)。たとえば、プロダクションコードではNumberFormatExceptionをキャッチする必要があります。

注:フレームワークの作成者は、基本例外をRuntimeExceptionに継承させることがあります(例 HibernateException =)。そのような例外もキャッチする必要があります。

20
dasblinkenlight

それは設計上の決定です。通常はそうはしません。ただし、コードのユーザーがExceptionをキャッチすることが重要であると考える場合、それは彼にそれを行うことを示唆する方法です。別の方法は、それをドキュメントに追加し、Exceptionをキャッチすることが重要である理由を説明することです。

6
Sibbo

throws-clauseで明示的に宣言する必要はありませんが、これはランタイム例外に関するものですが、この例外をjavadocに文書化して、ユーザーがこの例外が発生する状況とその意味を確認できるようにする必要があります。

3
Meno Hochschild