我定义为kotlin
中的实例变量,并希望初始化onCreate
的{{1}}方法。
activity
这里我在count变量上遇到以下错误。
必须在Kotlin中初始化或抽象属性
好吧,我读了这个帖子Property must be initialized or be abstract并尝试了同样但又一次我收到了以下错误。
原始类型属性
上不允许使用lateinit修饰符
var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
有没有办法在lateinit var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
中执行此操作?
答案 0 :(得分:41)
有几种方法可以解决此问题。
您可以使用默认值(e.i 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
}
现在您可以决定使用什么。
我希望它有所帮助。
答案 1 :(得分:-10)
没有理由让它未经初始化。只需将其初始化为0或-1。
lateinit
用于非null对象引用,无法在类体定义中轻松初始化。