文章指出,Page 类型在 Java 中被定义为一个泛型接口,允许为内容类型指定一个类型参数。在 Kotlin 中,这会导致空安全问题,因为编译器无法推断出内容类型的具体类型。这可能导致运行时错误,因为编译器无法保证内容类型是不会 null 的。

文章建议使用 Kotlin 的协变类型参数来解决这个问题,这将允许编译器推断出内容类型的具体类型并保证它不会 null。

Null Safety

Kotlin 的主要特性之一是 ,它在编译时清楚处理值。这通过非空声明和语义的表达而使应用程序更加安全,而不需要类似于的包装器的开销。(Kotlin 允许使用带有可空值的功能结构。请参阅此 ``。)

尽管 Java 并不允许在它的类型系统中表达空安全,但 Spring Data API 使用声明于 包中的 @ 工具友好注释进行注释。默认情况下,Kotlin 中使用的 Java API 的类型被识别为 ,对于此类类型,空检查是宽松的。 和 Spring 非空注释为 Kotlin 开发人员提供整个 Spring Data API 的空安全,其优势在于在编译时处理 `` 相关问题。

参阅 Null Handling of Repository Methods 来了解空安全如何应用到 Spring Data 存储库。

你可以通过添加 -Xjsr305 编译器标志及其以下选项 -Xjsr305={strict|warn|ignore} 来配置 JSR-305 检查。 对于 Kotlin 1.1+ 版本,默认行为与 -Xjsr305=warn 相同。strict 值需要 Spring Data API 的考虑空安全的因素。从 Spring API 推断的 Kotlin 类型应该在了解 Spring API 空值声明可能会演变的知识下使用,即使在小版本之间也有可能,而且未来还有可能添加更多检查。

泛型类型参数、可变参数和数组元素的空值能力目前不受支持,但应在即将发布的版本中支持。