best 'NonNull'アノテーションとは何ですか?
「最高」という意味で
現在の世界の様子は次のとおりです。さらなる洞察があれば歓迎します。
javax.validation.constraints.NotNull
( Docs )
+ javaxパッケージはこのように将来性があるようです
-JEEの一部notJSE。 JSEでは、 追加のlibs をインポートする必要があります。
-静的分析ツールではサポートされていません(ランタイム検証のみ)
( docs )edu.umd.cs.findbugs.annotations.NonNull
-javax
パッケージではなく外部ライブラリ
- deprecated findbugsバージョン3.X以降
+静的解析に使用(findbugs、したがってSonarによる)
( docs )javax.annotation.Nonnull
+静的解析に使用(findbugsで)
- JSR-305 は、 fbメーリングリスト に示されているように、休止/デッド/不明です。著者のビル・ピューは、直接尋ねられたとしても、何年も州にコメントしていません...
( docs 、興味深い presentation )org.Eclipse.jdt.annotation_2.0.0
+は静的解析に使用されます(ただし、findbugsではなくEclipseで)
-Eclipse専用(スタンドアロンで使用しようとしなかった)
( docs )org.jetbrains.annotations.NotNull
+は静的分析に使用されます(ただし、intelliJではfindbugsでは使用されません)
-IntelliJ専用(ただし、jarとしても公開されています)
lombok.NonNull
( docs )
+コード生成の制御に使用
-独自の注釈
Android.support.annotation.NonNull
( docs )
+ Android studioでの静的解析
-Android=特定の独自の注釈
org.checkerframework.checker.nullness.qual.NonNull
( docs )
+ JSR308 Java8の一部である実装(コードのさまざまな部分に注釈を書き込む機能を導入しましたが、新しい注釈は導入しませんでした)
+静的コードに使用(ただし、findbugsではありません)andランタイム分析
-ただし、外部ライブラリはJava人々による endorsed のようです
現在、私は Checker Framework を使用する傾向がありますが、他のビューを楽しみにしています...
[免責事項]ここで質問されたことがわかりましたが、回答がありませんでした(または、回答が間違っていた/不完全であった/古い)[/ disclaimer]
標準の@NonNull
アノテーションはありません。このような注釈を作成することは、長い間放棄されてきたJSR 305の目標でした。 JSR 305が再構成されるまで、標準の@NonNull
アノテーションはありません。オラクルには、そのような計画は現在ありません。 (JEEアノテーションはJSR 305の範囲外です。)
将来を保証するために考慮すべき最も重要な要素は、注釈が型注釈か宣言注釈かです。 @NonNull
は、変数自体ではなく変数の値のプロパティを示しているため、型注釈である必要があります。型注釈であると、List<@NonNull String>
のように、注釈をより多くの場所に書き込むこともできます。
注釈の定義で@Target
メタ注釈を調べることにより、注釈が型注釈であるかどうかを判別できます。この記事の執筆時点では、Checker FrameworkとEclipseのバージョンのみが型注釈であると思われるため、宣言注釈であるものよりもそれらを選択します。他のアノテーションの開発者は、それらを同様にタイプアノテーションに更新できることに注意してください。私は彼らの計画を知りません。
唯一の欠点は、型注釈を使用するにはJava 8コンパイラを使用する必要があることです。 Checker Framework には、注釈を含むコードをJava 7コンパイラーでコンパイルするためのメカニズムがあります。