RedCloud Help

7 Null-safety

虽然javadoc不允许你使用期类型系统来表示空安全性,但Spring框架现在在org.springframework.lang包中提供了一下注解,允许你声明API和字段的空性:

  • @Nullable:注释,表示特定参数、返回值或字段可以被null。

  • @NonNull:说明特定参数、返回值或字段不能是null的注解(参数/返回值和字段分别使用@NonNullApi 和@NonNullFields时不需要)。

  • @NonNullApi:包级注解,声明非空为参数和返回值的默认语义。

  • @NonNullFields:包级注解,声明非空为字段的默认语义。

Spring框架本身利用了这些注解,但它们也可用于任何基于Spring的java项目,以声明控安全Api和可选的空安全字段。通常类型参数、varargs和数组元素的无效性尚未得到支持,但在即将发布的版本中应该会得到支持,最新信息请参见SPR-15942.空性声明有望在SpringFramework版本(包括次版本)之间进行微调。方法体内部使用的类型的可空性不在次功能的范围内。

7.1 Use cases

除了为Spring Framework API空性提供显式声明外,IDE(如IDEA或Eclipse)还可以使用这些注解来提供与空安全性相关的有用警告,以避免在运行时出现NullPointerException的情况。 由于Kotlin本身支持Null-safety,因此它们还可用于在Kotlin项目中实现Spring API null-safe。更多详情,请参阅Kotlin支持文档。

7.2 JSR-305 meta-annotations

Spring注解通过JSR 305注解(一个休眠但广泛传播的JSR)进行元注解。JSR305元注解允许IDEA或Kotlin等工具供应商以通用方式提供空安全支持,而无需硬编码支持Spring注解。 不需要也不建议在项目classpath中添加JSR-305依赖项来利用Spring null-safe API 。只有在代码库中使用空安全注解的基于SPring的库等项目,才应在compileOnly Gradle配置或Maven provided作用域中添加com.google.code.findbugs:jsr305:3.0.2以避免编译警告。

03 May 2025