私は次のように宣言された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...、意図が明確になります。