私は次のように宣言されたJavaのいくつかのメソッドを見ました:
void foo(@Nullable Object obj)
{ ... }
@Nullable
ここの意味は何ですか?それは入力が可能であるという意味null
ですか?
注釈がなくても、入力はnullになる可能性があるので、それだけではないでしょうか?
@Nullable
あなたの質問の文脈でどのライブラリが提供していますか?それはチェッカー?
私は次のように宣言されたJavaのいくつかのメソッドを見ました:
void foo(@Nullable Object obj)
{ ... }
@Nullable
ここの意味は何ですか?それは入力が可能であるという意味null
ですか?
注釈がなくても、入力はnullになる可能性があるので、それだけではないでしょうか?
@Nullable
あなたの質問の文脈でどのライブラリが提供していますか?それはチェッカー?
回答:
このアノテーションは一般的にを排除するために使用されNullPointerExceptions
ます。@Nullable
このパラメータはかもしれないと言いますnull
。このような動作の良い例は、Google Guiceにあります。この軽量の依存関係注入フレームワークでは、この依存関係がそうである可能性があることがわかりますnull
。合格しようとするならnull
アノテーションなしで、フレームワークはその仕事を拒否します。
アノテーションでさらに@Nullable
使用できるものは何ですか@NotNull
。ここでは、それらを適切に使用するためのいくつかのヒントを見つけることができます。IntelliJのコードインスペクションは注釈をチェックし、コードのデバッグに役立ちます。
ツールによって、意味の解釈が@Nullable
異なる場合があります。たとえば、Checker FrameworkとFindBugsでは処理が@Nullable
異なります。
確かに、まったく異なる考え方があります。私の世界では、APIの呼び出し元、データベースレコード、元のプログラマーなどの制御できないサードパーティを扱っているため、「nullを渡さない」を強制することはできません。 。Java8以降を使用しているため、if
ブロックよりも少しクリーンなアプローチがあります。
public String foo(@Nullable String mayBeNothing) {
return Optional.ofNullable(mayBeNothing).orElse("Really Nothing");
}
にスワップ.orElse
すること
で、そこでいくつかの例外をスローすることもできorElseThrow(() -> new Exception("Dont' send a null"))
ます。
機能的に何も追加しない@Nullableを使用したくない場合は、パラメーターに名前を付けるだけでmayBe...
、意図が明確になります。