質問どの @NotNull Java アノテーションを使用する必要がありますか? 時代遅れであり、やや意見に基づいています。それ以来、新しい IDE とともに Java 8 が登場しました。
Java 8はJSR 308の統合により型注釈を許可しますが、何も付属していません。JSR 308 Explained: Java Type Annotations by Josh Juneauから:
JSR 308、Annotations on Java Types は、Java SE 8 の一部として組み込まれています。
...
コンパイラ チェッカーを記述して、注釈付きコードを検証し、コードが特定の要件を満たしていない場合にコンパイラ警告を生成してルールを適用できます。Java SE 8 はデフォルトの型チェック フレームワークを提供しませんが、型チェック用のカスタム アノテーションとプロセッサを作成することは可能です。また、ダウンロード可能な型チェック フレームワークも多数あります。これらを Java コンパイラのプラグインとして使用して、アノテーションが付けられた型をチェックおよび適用できます。型チェック フレームワークは、型注釈定義と、注釈処理のためにコンパイラで使用される 1 つ以上のプラグ可能なモジュールで構成されます。
少なくともある種の@CanBeNull
とを提供するソリューションのみを考慮@CannotBeNull
して、次の情報を見つけました (間違っている可能性があります)。
- Eclipse の JDT Null Analysisの
org.eclipse.jdt.annotation
. 他の IDE にはそれぞれのパッケージがあります。JSR 308 を使用し、Java 8 より前のアノテーションも引き続きサポートされています。 - FindBugの
javax.annotation
. 休止状態のJSR 305を使用すると、Java 8 の型注釈を使用していないようです。Oracle の API に統合されていませんが、何らかの理由でjavax
ドメインを使用しています。 - チェッカー フレームワークの
org.checkerframework.checker.nullness
. JSR 308 を使用します。 - JavaEE の
javax.validation.constraints
. それが何を使用するのかはわかりませんが、@CanBeNull
とにかくありません。
静的コード分析で使用されるものもあれば、ランタイム検証で使用されるものもあります。
上記のオプション間の実際的な違いは何ですか? 標準はありますか (そうなる予定ですか)、それとも誰もが独自の分析フレームワークを作成できるようにするためのものですか?