私はJavaコード内で多くの守備型ヌルチェックを使用しています。彼らは目的を十分に果たしていますが(ほとんどの場合)、「醜い」見た目のコードでは大きな犠牲を払っています。Java:オブジェクトに対してヌルチェックをスキップする場合
いつもこれらのヌルチェックを入れることは理にかなっていますか?たとえば、次のように事実上
if(object == null){
log.error("...")
throw new SomeRuntimeException("");
} else{
object.someMethod();
}
、上記のコード部分は、文と同じですobject.someMethod();
object
の値がnullの場合、例外は両方のケースでスローされていたであろう
(NullpointerExceptionが発生)。
NullpointerExcetion(NPE)をマスクしてカスタムRunTimeExceptionをスローするのは本当に意味がありますか(上記のスニペットのように)? 私はNPEを悪として扱っている開発者をいくつか見てきました。しばしば、それをマスクしてカスタム例外を隠すための防御方法を見つけようとしました。 このマスキングは本当に必要ですか?
質問
- は、それは我々がそのヌル状態から回復できない場合は、私たちのコードはNPEて失敗することを可能にすることは理にかなっていませんか? (上記の例では、回復不可能なシナリオです)
- そうでない場合、なぜですか?ポストされたあなたのようなケースでは
あなたのコードがある場合は、あなただけが必要な場合、私はこの前に、あなたは決してnull要素を持っている必要がありWEEL-構築し、NPEチェックを^^使用しないpersonnally NEVERましたオブジェクトの作成を確実にするか、これを好きになる – azro
これは興味深い質問ですが、私はそれが決定的ではあるが意見に基づいていない回答をどのように認めているかはわかりません。 –
私は、 'null'でないと期待されるパラメータに対して' @ Nonnull'アノテーションを使う方が好きです。 '@ Nonnull'アノテーションはデフォルトでは利用できませんが、多くのIDE(intelliJなど)でサポートされています。あなたはあなたの依存関係に 'com.google.code.findbugs.annotations'を追加する必要があります。これにより、IDEは注釈を付けるメソッドに 'null 'を渡す機会があるかどうかなど、あなたに警告することができます。この時点で、あなたは「ヌル」を期待していないことを他人に理解させるのにも役立ちます。 – Philipp