我正在尝试使用泛型类型的 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' 作为返回类型?
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 需要在编译后捆绑其运行时?