我在 kotlin
中定义为一个实例变量,并希望将其初始化为 activity
的 onCreate
方法。
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 in Kotlin
嗯,我读了这篇文章 Property must be initialized or be abstract并尝试了同样的方法,但我再次收到以下错误。
lateinit modifier is not allowed on primitive type properties
lateinit var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
有没有办法在 Kotlin
中做到这一点?
最佳答案
有几种方法可以解决此问题。
您可以使用默认值(例如 0
或 -1
或其他)对其进行初始化,然后在您的逻辑说明时对其进行初始化。
或者告诉编译器稍后将在此代码中使用 Delegates.notNull
check 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
}
现在你可以决定使用什么了。
希望对你有帮助。
https://stackoverflow.com/questions/44381791/
相关文章:
java - 如何将 Java 赋值表达式转换为 Kotlin
spring - Kotlin 和 Spring Boot @ConfigurationProper
android - 在 android studio 中运行带有 main 函数的单个 kotlin
kotlin - 字符串插值在 Kotlin 中是如何工作的?
android - 无法获取提供商 com.google.android.gms.ads.Mobil
java - Android Studio 3.1.3 - Unresolved reference
list - 在 Kotlin 中,如何在迭代时修改列表的内容