零安全
尽管 Java 不允许您使用其类型系统来表达 null 安全性,但 Spring Framework
在org.springframework.lang
套餐让你
声明 API 和字段的可空性:
-
@Nullable
:注释,以指示 特定参数、返回值或字段可以是null
. -
@NonNull
:注释,以指示特定的 参数、返回值或字段不能是null
(参数、返回值、 和字段,其中@NonNullApi
和@NonNullFields
apply 分别)。 -
@NonNullApi
:包级别的注释 将非 null 声明为参数和返回值的默认语义。 -
@NonNullFields
:包上的注释 级别,该级别将非 null 声明为字段的默认语义。
Spring Framework 本身利用了这些注释,但它们也可以用于任何 基于 Spring 的 Java 项目,用于声明空安全 API 和可选的空安全字段。 尚不支持泛型类型参数、vararg 和数组元素的可空性声明。 可空性声明预计将在 Spring Framework 版本之间进行微调, 包括次要的。在方法体内使用的类型的可空性在 此功能的范围。
其他常见库(例如 Reactor 和 Spring Data)提供空安全 API,这些 API 使用类似的可空性安排,为 Spring 应用程序开发人员。 |
使用案例
除了为 Spring Framework API 可空性提供显式声明外,
IDE(例如 IDEA 或 Eclipse)可以使用这些注释来提供有用的
与空安全相关的警告,以避免NullPointerException
在运行时。
它们还用于使 Spring API 在 Kotlin 项目中为空安全,因为 Kotlin 本身是 支持空安全。更多详情 可在 Kotlin 支持文档中找到。
JSR-305 元注释
Spring 注解使用 JSR 305 注解(一种休眠但广泛使用的 JSR)进行元注解。JSR-305 元注释让工具提供商 如 IDEA 或 Kotlin,以通用方式提供空安全支持,而无需 对 Spring 注释的硬代码支持。
既没有必要也不建议将 JSR-305 依赖项添加到项目类路径中,以
利用 Spring 的空安全 API。只有使用
null-safety 注释应添加com.google.code.findbugs:jsr305:3.0.2
跟compileOnly
Gradle 配置或 Mavenprovided
作用域以避免编译器警告。