lateinit修饰符在Kotlin的原始类型属性上是不允许的
我在kotlin
中定义了一个实例变量,并且想要初始化onCreate
方法activity
。lateinit修饰符在Kotlin的原始类型属性上是不允许的
var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
这里我得到一个计数变量的错误。
属性必须被初始化或科特林
好是抽象的,我读这个线程Property must be initialized or be abstract,并试图相同的,但我再次得到一个提示以下错误。
lateinit修改是不允许的原始类型的属性
lateinit var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
有没有办法在Kotlin
做到这一点?
有几种方法可以解决此问题。
您可以使用默认值(例如0
或-1
或其他)对其进行初始化,然后在逻辑说明时进行初始化。
或者告诉编译器,通过使用Delegates.notNull
检查notNull,稍后在此代码中初始化计数。
var count: Int by Delegates.notNull<Int>()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
//You can not call `Int.inc()` in onCreate()` function until `count` is initialised.
//count.inc()
// **initialise count**
}
如果你需要依靠需求值(如果没有必要onCreate
初始化),你可以使用lazy
功能。只有在您需要进行密集(某些计算/膨胀布局等)任务时才使用此选项on demand
,而不是仅指定一个值。
var count:Int by lazy {
// initialise
}
现在你可以决定使用什么。
我希望它有帮助。
没有理由让它未初始化。只需将其初始化为0或-1。
lateinit
适用于无法在类体定义中轻松初始化的非空对象引用。
尤其是随着Kotlin 1.2的发布和'isInitialized'的引入,将一个属性保留为未初始化 - 也许0和-1是非常有意义的初始化后两个合法值? – msrd0
您可以初始化为0。 –
请参阅:https://*.com/a/44206094/3679676 –