Kotlin的原始类型属性不允许使用lateinit修饰符
我在kotlin
定义了一个实例变量,并且想要在一个activity
kotlin
方法上初始化它。
var count: Int override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) count.inc() }
在这里,我得到了一个计数变量的错误。
财产必须在Kotlin初始化或抽象
那么,我读这个线程属性必须初始化或是抽象的,并尝试相同,但我又收到了一个错误。
基元类型属性不允许使用lateinit修饰符
lateinit var count: Int override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_main) count.inc() }
Kotlin
有没有办法做到这一点?
有几种方法可以解决这个问题。
你可以使用默认值(ei 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
是用于在类体定义中不能轻易初始化的非空对象引用。