0

慎重または防御的なコーディング手法と null セーフ API メソッドを適用することにより、NullPointerException を回避するための最善の回避方法を教えてください。特にJavaでコーディングしているときに、私が分析したことの1つは、nullチェックを入れることであり、使用できるEclipseエディターにアドバイスできるカスタムテンプレートもあります..!!

4

3 に答える 3

4

関数を呼び出して null が返される可能性がある場合は、それを確認する必要があります。一方、どこでも null をチェックすると、防御的になりすぎてコードがわかりにくくなります。ソース コードや Javadoc にアクセスできる場合は、関数が null を返すかどうかを確認できます。

値を期待しているのに変数が null の場合、例外をスローする必要がある場合があります。この場合、別の場所でエラーが発生するため、NPE が役立ちます。

また、@NonNull や @Nullable などのいくつかの注釈があり、一部の静的解析チェッカー (Findbugs など) は、潜在的な null ポインターの問題をキャッチするのに役立ちます。

構築している関数について、null を返すことが理にかなっているかどうかを確認してください。たとえば、関数がコレクションを返す場合、空のコレクションを返すことと null を返すことには違いがあります。

詳細: Null オブジェクト パターン

于 2012-08-15T12:25:24.163 に答える
1
  1. オブジェクトを操作する前に、null 逆参照を確認してください。

    if(something != null) // ドームのことをします。

  2. null 逆参照を却下したい場合は、yoda 記法を使用してください。

    if("yes".equals(something) // 何かをする

Eclipse エディター プラグイン? たぶん、スタイルチェックを使用できます。

于 2012-08-15T12:24:03.000 に答える
0

便利なパターンの 1 つに Option パターンがあります。これは Scala で広く使用されており、同等の Java についてはこちらで説明しています。

簡単に言うと、オブジェクトへの参照を返す代わりに、Option オブジェクトを返します。1 つのサブクラス (Some) には参照が含まれ、別のサブクラス (None) には含まれません。したがって、API は、値が返されない可能性があることを明示的に示しています。基礎となる参照を取り戻すために、与えられたものを決定する必要があります

例 (疑似コード)

Option<String> value = findNameForId(34);
if (value instanceof Some) {
   return ((Some<String>)value).get();
}
else {
   throw new Exception();
}

Java ではかなり冗長ですが、Scala ではかなり冗長です。

findNameForId(34) match {
   case Some(id) => id
   case None => throw new Exception
}

Scala ではさらに簡潔にすることができます。

findNameForId(34).getOrElse(throw new Exception)

また

findNameForId(34).getOrElse(DefaultValue)
于 2012-08-15T13:14:59.727 に答える