4

Java 8 型注釈 (JSR 308) により、型チェッカーは静的コード分析を実行できます。たとえば、チェッカー フレームワークは、注釈を介してnullの可能性をチェックでき@NonNullます。

さまざまなプロジェクトが独自のNonNullアノテーションを定義しています。たとえば、次のようになります。

このような注釈については、通常は実行時に必要ないため、 が@interfaceを持つことを期待します。@Retention(RetentionPolicy.CLASS)最も重要なことは、コードがそれぞれのライブラリにランタイムの依存関係を持たないことです。

whileorg.eclipse.jdt.annotation.NonNullこのアプローチに従いますが、(JSR 305) やそれ自体など、他のほとんどのNonNullアノテーションには. これらの注釈に特別な理由はありますか?javax.annotation.Nonnullorg.checkerframework.checker.nullness.qual.NonNull@Retention(RetentionPolicy.RUNTIME)RetentionPolicy.RUNTIME


明確化: Checker Framework は、下位互換性のためにコメント内の注釈をサポートしています。ただし、実行時の依存関係を回避するためだけに Java 8 でそれらを使用するのは、汚いハックのように思えます。

4

2 に答える 2

1

各注釈には目的があります。

javax.validation.constraints.NotNull

これは Bean 検証仕様によって定義され、実行時に非 null チェックを実行するために使用されるため、実行時にフォーム検証などを実行するために保持する必要があります ...

@RetentionPolicy.SOURCE => 通常はドキュメントに使用されます @RetentionPocily.CLASS => JVM ではなくコンパイラに情報を提供することを許可します (たとえば、コンパイル中にコード生成を実行するため) @RetentionPolicy.RUNTIME => 注釈情報の取得を許可しますJVMレベルで(つまり実行時)。

よろしく、

ロイック

于 2016-08-16T12:52:38.343 に答える