javadocやAPIにはどれくらい寛大に@throws
を使用する必要がありますか?例えば、私が持っている場合:Javadocで使用する@throwsの数
LDAPException
NullPointerException
IllegalArgumentException
Exception
私は一つ一つのために@throws
を使用する必要があり、または私はちょうど@throws Exception
を言うべき?
javadocやAPIにはどれくらい寛大に@throws
を使用する必要がありますか?例えば、私が持っている場合:Javadocで使用する@throwsの数
LDAPException
NullPointerException
IllegalArgumentException
Exception
私は一つ一つのために@throws
を使用する必要があり、または私はちょうど@throws Exception
を言うべき?
理想的には、javadoc @throws節は、実際のメソッドthrows
節のスーパーセットである必要があります。
たとえば、あなたの方法throws IOException
場合、あなただけでなく、それが起こるかもしれない理由について話をする状況で、一般的なI/Oエラーが発生しますが、また@throws FileNotFoundException
(IOException
のサブクラス)を説明するため@throws IOException
を有することができます。
同様に、throws NullPointerException
を宣言しなくても、これが発生する可能性がある場合は、チェックされていない例外であり、メソッドシグネチャに書き込まれる必要はありません。
あなたは@throws Exception
になりますか?いいえ、しかし、より一般的には、あなたはthrows Exception
ではありません。それは別の議論です。しかし結果として、いいえ、この種の悪い習慣をjavadocで繰り返すのは良いことではありません。何が起こる可能性があるか?とにかく@throws
と一緒に1つずつ文書化してみませんか?
あなたが投げるすべての例外を文書化する必要があると思いますが、これはまたCheckStyleによって実施されるルールです。 Exception
を文書化すると、すべての例外の非常に一般的なスーパークラスであるため、APIのユーザーに分かりやすい情報が提供されません。
このように、あなたのAPIのユーザーにとって意味のある例外を投げるべきだと思っています。層の技術に基づく例外ではありません。
たとえば、LDAPから別のものに切り替えることができますが、例外はもう一致しません。代わりに、インターフェイスを変更せずに実装を自由に変更することが重要です。
Javaプラットフォーム内で意味をなさない例外が見つからない場合は、ServiceExceptionなどの独自の例外を定義して例外翻訳を行うことができます。つまり、実装依存の例外をキャッチして例外を投げることができます。
NullPointerException
はランタイム例外(未チェック)です。一般に宣言されておらず、スローされず、また文書化されていません。これは、API内の初期化されていないか、またはnullパラメータによって生成される可能性があります。その場合、IllegalArgumentExceptionでそれを翻訳するのが理にかなっており、それを文書化します。
IllegalArgumentException
も実行時例外です。チェックしないと明示的に投げる必要はありませんが、スローしてドキュメントをスローするのは良い方法です。
私はあなたが質問されたものとは異なる質問に答えていると思います... – andersoj
@andersoj ok、私はあなたの批評を得ます。私は質問のポイントであった例外の文書化について十分に話しませんでした。私は、問題に対処するために最初のセンテンスを追加し、他のセンテンスを更新しました。私は、たとえポスターが尋ねなかったとしても、それに興味があるかもしれないので、より低いレベルの例外はより高いレベルの例外で翻訳されるべきであると言う部分を除外したくない。とにかく、あなたのコメントをありがとう、建設的な批評は感謝しています。 – stivlo
回答が改善され、削除されました... – andersoj