2つの違いは何ですか?両方とも、値がnullである可能性があり、それに応じて処理する必要がある、つまりnullをチェックする必要があることを意味するようです。
更新:上記の2つの注釈は、JSR-305/FindBugsの一部です。 http://findbugs.sourceforge.net/manual/annotations .html
追加したリンクからは明らかだと思います。@CheckForNull
を使用し、値を使用するコードがnull
をチェックしない場合、FindBugsはエラーとして表示します。
FindBugsは@Nullable
を無視します。
実際には、この注釈は、包括的な
NonNull
注釈をオーバーライドする場合にのみ役立ちます。
値を常にチェックする必要がある場合は、@CheckForNull
を使用します。 @Nullable
を使用します。null
は問題ありません。
編集:@CheckForNull
は現時点では十分にサポートされていないようですので、それを避けて@NonNull
を使用することをお勧めします( Which @NotNull Java注釈use? )。もう1つのアイデアは、FindBugs開発者と直接連絡を取り、ドキュメントの不一致について意見を求めることです。
@Nonnull
および@Nullable
は、IntelliJ IDEAによって正しく処理されます。 FindBugsは@Nonnull
の問題を発見しましたが、@Nullable
と@CheckForNUll
の問題は見逃していました。 IDEAおよびFindBugsで検出された問題にはコメントが付いています。
package com.db.icestation;
import javax.annotation.CheckForNull;
import javax.annotation.Nonnull;
import javax.annotation.Nullable;
public class test {
@Nullable public String nullable() {
return "";
}
@Nonnull public String nonnull() {
return null; // IDEA, findbugs
}
@CheckForNull public String checkForNull() {
return null;
}
public static void main(String[] args) {
System.out.println(new test().nullable().length()); // IDEA
System.out.println(new test().nonnull().length());
System.out.println(new test().checkForNull().length());
}
}
IntelliJ Ideaでは@javax.annotation.Nullable
がデフォルトでサポートされており、@Nullable
引数または戻り値を逆参照しようとすると警告が発生します。
@ alexander-pavlov、「一定の条件と例外」検査の設定に@javax.annotation.CheckForNull
を追加できます。 「ファイル」->「設定」->「検査」->「可能性のあるバグ」->「一定の条件と例外」->「注釈の構成」に進みます。
@CheckForNull
は@Nullable
よりも明確な意味を持っているため、上記の回答で@lbalazscsが言及したように、これを行うことを好みます。