4

質問どの @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して、次の情報を見つけました (間違っている可能性があります)。

静的コード分析で使用されるものもあれば、ランタイム検証で使用されるものもあります。

上記のオプション間の実際的な違いは何ですか? 標準はありますか (そうなる予定ですか)、それとも誰もが独自の分析フレームワークを作成できるようにするためのものですか?

4

2 に答える 2

5

あなたが収集した情報は、すでにそれをほぼ説明しています:

型注釈 (JSR 308) に基づく静的分析は、以前のアプローチよりもはるかに強力です。

2 組のアノテーションが JSR 308 を使用します。どちらも静的分析を実行するためです (高度な型チェックと見なすこともできます)。これらの注釈を促進する 2 つのツールは、基本的に互換性があります (そして、それぞれが他方の注釈を使用することもできます)。私が知っている相違点は、主に次の 2 つの領域にあります。

  • IDE 統合。
  • 注釈のない型の解釈。厳密な世界では、すべての型が非 null または nullable であるため、注釈が欠落している場合、デフォルトで非 null として解釈される可能性があります。あるいは、基礎となる型システムで「レガシー型」の概念を使用して、「チェックされていない変換」が必要な場合に警告を発することもできます (ジェネリック型と生の型の組み合わせと同様)。私の知る限りでは、Checkers Framework は厳密なアプローチを適用しますが、Eclipse では@NonNullByDefault戦略を選択するか、(移行のために) 「レガシー型」を許可するかを選択できます。

また、私の知る限りでは、現時点でこれらのアノテーションの標準化に投資する予定はありません。

于 2016-08-26T12:16:23.837 に答える