null セーフ
Java では型システムで null 安全性を表現できませんが、Spring Framework では、API およびフィールドの null 可能性を宣言できるように、org.springframework.lang
パッケージで次のアノテーションが提供されています。
@Nullable
(Javadoc) : 特定のパラメーター、戻り値、フィールドがnull
になる可能性があることを示すアノテーション。@NonNull
(Javadoc) : 特定のパラメーター、戻り値、フィールドをnull
にすることができないことを示すアノテーション (それぞれ、@NonNullApi
および@NonNullFields
が適用されるパラメーター、戻り値、フィールドでは必要ありません)。@NonNullApi
(Javadoc) : パラメーターおよび戻り値のデフォルトのセマンティクスとして非 null を宣言するパッケージレベルでのアノテーション。@NonNullFields
(Javadoc) : フィールドのデフォルトのセマンティクスとして null 以外を宣言するパッケージレベルでのアノテーション。
Spring Framework 自体はこれらのアノテーションを利用しますが、これらのアノテーションを Spring ベースの Java プロジェクトで使用して、null セーフ API やオプションで null セーフフィールドを宣言することもできます。ジェネリクス型引数、可変引数、配列要素の null 許容宣言はまだサポートされていません。Null 可能性宣言は、マイナーリリースを含め、Spring Framework リリース間で微調整される予定です。メソッド本体内で使用される型の null 許容性は、この機能の範囲外です。
Reactor や Spring Data などの他の一般的なライブラリは、同様の nullability 配置を使用する null セーフ API を提供し、Spring アプリケーション開発者に一貫した全体的なエクスペリエンスを提供します。 |
ユースケース
Spring Framework API nullability の明示的な宣言を提供することに加えて、これらのアノテーションは IDE(IDEA や Eclipse など)によって使用され、実行時の NullPointerException
を回避するために null 安全に関連する有用な警告を提供できます。
Kotlin はネイティブで null-safety をサポートしているため、これらは Kotlin プロジェクトで Spring API を null-safe (英語) にするためにも使用されます。詳細については、Kotlin サポートドキュメントを参照してください。
JSR-305 メタアノテーション
Spring アノテーションには、JSR 305 (英語) アノテーション (休止中だが広く普及している JSR) でメタアノテーションが付けられます。JSR-305 メタアノテーションを使用すると、IDEA や Kotlin などのツールベンダーは、Spring アノテーションのサポートをハードコードすることなく、一般的な方法で null 安全性サポートを提供できます。