跳到主要内容

空安全

ChatGPT-4o 中英对照 Null-safety

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 的可空性声明甚至可能在小版本之间演变的情况下使用,并且将来可能会添加更多检查。

备注

泛型类型参数、可变参数和数组元素的可空性尚不支持,但应该会在即将发布的版本中支持。有关最新信息,请参阅此讨论