web-dev-qa-db-ja.com

@Nullableアノテーションの使い方

私はJavaでいくつかのメソッドを宣言した:

void foo(@Nullable Object obj)
{ ... }

ここで@Nullableの意味は何ですか?入力がnullになる可能性があるということですか?アノテーションがなければ、入力はまだnullになる可能性があるので、それだけではないと思いますか?

ありがとう

310
user1508893

メソッドがnull値を受け入れること、およびメソッドをオーバーライドする場合はnull値も受け入れるべきであることが明確になります。

FindBugs のようなコードアナライザーのためのヒントとしても役立ちます。たとえば、そのようなメソッドが最初にnullをチェックせずに引数を間接参照した場合、FindBugsは警告を発します。

331
JB Nizet

このアノテーションはNullPointerExceptionsを排除するためによく使われます。 @Nullableは、このパラメーターがnullである可能性があるとよく言っています。そのような振る舞いの良い例は Google Guice にあります。この軽量の依存性注入フレームワークでは、この依存性がnullである可能性があることをあなたは話します。アノテーションを付けずにnullを渡そうとすると、フレームワークはその仕事を拒否します。

もっと@Nullable@NotNullアノテーションと一緒に使われるかもしれません。ここであなたは 見つけることができます /それらを正しく使う方法のヒント。 IntelliJのコード検査は注釈をチェックし、コードのデバッグに役立ちます。

79
Adam Sznajder

ツールが異なれば、@Nullableの意味が異なって解釈される可能性があります。たとえば、 Checkerフレームワーク および FindBugs@Nullableを別々に処理します

16
reprogrammer