空安全
Kotlin 的主要功能之一是 空安全,它在编译时干净地处理 null
值,而不是在运行时遇到著名的 NullPointerException
。这通过可空性声明和表达“值或无值”语义来使应用程序更安全,而无需支付包装器的成本,例如 Optional
。(Kotlin 允许对可空值使用函数式构造。请参阅此 Kotlin 空安全的综合指南。)
虽然 Java 的类型系统不支持表达空安全,但 Spring 框架通过在 `org.springframework.lang` 包中声明的工具友好型注解,提供了 整个 Spring 框架 API 的空安全。默认情况下,在 Kotlin 中使用的 Java API 的类型被识别为 平台类型,对于这些类型,空检查是放宽的。 Kotlin 对 JSR-305 注解的支持 和 Spring 可空性注解为 Kotlin 开发人员提供了整个 Spring 框架 API 的空安全,其优势在于可以在编译时处理与 `null` 相关的 issue。
Reactor 或 Spring Data 等库提供了空安全的 API 来利用此功能。 |
您可以通过添加 `-Xjsr305` 编译器标志并使用以下选项来配置 JSR-305 检查:`-Xjsr305={strict|warn|ignore}`。
对于 kotlin 版本 1.1+,默认行为与 `-Xjsr305=warn` 相同。`strict` 值需要将 Spring 框架 API 空安全考虑在内,在从 Spring API 推断的 Kotlin 类型中,但应注意,Spring API 可空性声明甚至在次要版本之间也可能发生变化,并且将来可能会添加更多检查。
泛型类型参数、可变参数和数组元素的可空性目前尚不支持,但将在即将发布的版本中提供。有关最新信息,请参阅 此讨论。 |