kotlin - 为什么泛型类型属性可以为空?

我正在尝试使用泛型类型的 lateinit 不可为空的属性创建参数化类:

class Test<T> {

   private lateinit var t : T

   private lateinit var s : String

}

后者是允许的,但前者是不允许的。编译器返回以下错误:

Error:(7, 11) ''lateinit'' modifier is not allowed on nullable properties

由于我没有声明 T?,我很困惑为什么会这样。

最佳答案

The default upper bound (if none specified) is Any? (Source)

换句话说,当您使用 T 时,Kotlin 假定这可能是 任何 类型,无论是原始类型、对象还是可为空的引用。

要解决这个问题,请添加一个上部类型:

class Test<T: Any> { ... }

https://stackoverflow.com/questions/33021802/

相关文章:

function - 为什么不能使用 'kotlin.Result' 作为返回类型?

kotlin - Kotlin 的不稳定属性?

jpa - kotlin 数据类 + bean 验证 jsr 303

java - Kotlin 属性的私有(private) getter 和 public sette

android - 警告 : warning: Supported source version '

android - ListAdapter 未更新 RecyclerView 中的项目

java - 在 Android Studio 中将 "java"目录重命名为 "kotlin"

kotlin - 为什么 Kotlin 需要在编译后捆绑其运行时?

java - Kotlin 中的错误但仅使用 Java - 类 kotlin.reflect.jvm

kotlin - Kotlin 中的静态方法导入