我定义像一个实例变量,kotlin
并希望初始化它的onCreate
方法activity
.
var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
Run Code Online (Sandbox Code Playgroud)
这里我在计数变量上得到一个以下错误.
属性必须在Kotlin中初始化或抽象
好吧,我读过这个帖子属性必须初始化或者是抽象的并且尝试相同但是我再次得到以下错误.
原始类型属性不允许使用lateinit修饰符
lateinit var count: Int
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
count.inc()
}
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点Kotlin
?
cha*_*l03 52
有几种方法可以解决此问题.
您可以使用默认值(EI初始化它0
或-1
或其他),然后只要你的逻辑说其初始化.
或者通过使用Delegates.notNull
check notNull告诉编译器将在此代码中稍后初始化count.
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**
}
Run Code Online (Sandbox Code Playgroud)
如果您需要按需计数值(如果不需要初始化onCreate
),您可以使用lazy
函数.仅当您要执行密集(某些计算/充气布局等)任务时才使用此选项on demand
,而不仅仅是分配值.
var count:Int by lazy {
// initialise
}
Run Code Online (Sandbox Code Playgroud)
现在您可以决定使用什么.
我希望它有所帮助.
归档时间: |
|
查看次数: |
13730 次 |
最近记录: |