オブジェクトがnull でないかどうかをチェックするときに、 NullPointerException の代わりに IllegalArgumentException をスローするApache Commons ValidateまたはGuava Preconditionsの代替手段を知っていますか ( Spring Assertを除く)。
私はJavadocsが言うことを知っています:
アプリケーションは、このクラス [NullPointerException] のインスタンスをスローして、null オブジェクトの他の不正な使用を示す必要があります。
それにもかかわらず、私はそれが好きではありません。私にとって、NPE は常にどこかで null 参照を確保するのを忘れていたことを意味していました。私の目は非常に訓練されており、1 秒あたり数ページの速度でログを閲覧しているのを見つけることができました。そうすると、頭の中で常にバグ アラートが有効になっています。したがって、IllegalArgumentException が予想される場所でスローされると、かなり混乱します。
私が豆を持っているとしましょう:
public class Person {
private String name;
private String phone;
//....
}
およびサービスメソッド:
public void call(Person person) {
//assert person.getPhone() != null
//....
}
状況によっては、人が電話を持っていなくても問題ない場合があります (私のおばあちゃんは電話を持っていません)。しかし、そのような人に電話をかけたい場合は、 IllegalArgumentを渡してcallメソッドを呼び出すことです。階層を見てください - NullPointerException は IllegalArgumentException のサブクラスでさえありません。基本的には、null 参照で getter を呼び出そうとしました。
その上、すでに議論があり、私が完全に支持するこの素晴らしい答えがあります. だから私の質問はただ - 私はこのような醜いことをする必要がありますか?
Validate.isTrue(person.getPhone() != null, "Can't call a person that hasn't got a phone");
または、notNull チェックのために IllegalArgumentException をスローするだけのライブラリはありますか?