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