はException
前提条件のチェックに失敗したためにスローされるため、単に事実を述べるのではなく、違反した要件を述べる必要があると思います。
つまり、と言う代わりに"username is null"
、と言い"username should not be null"
ます。
前提条件チェックのためのライブラリの使用について
ヒントとして、前提条件のチェックを容易にするために設計された多くのライブラリの 1 つを使用できます。Guava の多くのコードで使用com.google.common.base.Preconditions
正しい引数と状態を検証するために独自のメソッドの開始時に呼び出される単純な静的メソッド。これにより、次のような構成が可能になります。
if (count <= 0) {
throw new IllegalArgumentException("must be positive: " + count);
}
コンパクトなものに交換
checkArgument(count > 0, "must be positive: %s", count);
ここでより直接的に関連するのはcheckNotNull
、 があることです。これにより、次のように簡単に書くことができます。
checkNotNull(username, "username should not be null");
上記のコードがいかに自然に読み取れるかに注意してください。詳細なメッセージには、違反した要件が明示的に示されています。
事実を述べる別の方法は、より厄介です。
// Awkward!
checkArgument(count > 0, "is negative or zero: %s", count);
checkNotNull(username, "username is null");
さらに、クライアントはすでに事実を認識している可能性があり、例外は実際の要件が何であるかを理解するのに役立たないため、これはあまり役に立たない可能性もあります。
対IllegalArgumentException
でNullPointerException
元のコードは引数をスローIllegalArgumentException
しnull
ますが、Guavaは代わりにPreconditions.checkNotNull
スローしNullPointerException
ます。
これは、API によって設定されたガイドラインに従っています。
NullPointerException
: アプリケーションは、オブジェクトの他の不正な使用を示すために、このクラスのインスタンスをスローする必要がありnull
ます。
さらに、Effective Java 2nd Edition からの引用は次のとおりです: Item 60: Favor the use of standard exceptions :
おそらく、すべての誤ったメソッド呼び出しは、不正な引数または不正な状態に要約されますが、他の例外は、特定の種類の不正な引数および状態に対して標準的に使用されます。呼び出し元がnull
null 値が禁止されているパラメーターを渡した場合、規則では、NullPointerException
ではなく がスローされることが規定されていますIllegalArgumentException
。