我有很多重复的代码,而且由于我对 Kotlin 还很陌生,所以我想学习并尝试尽可能多地利用它。我有许多延迟声明MutableLiveData<Int>
的属性,在代码的某个地方,我正在检查每个属性,以确保实时数据的值永远不会低于 0。我认为使用 Kotlin 的委托会起作用,但我觉得我迷路了。
这是我的声明片段(默认值为 0)。
private val count: MutableLiveData<Int> by lazy {
MutableLiveData<Int>().also { it.value = 0 }
}
这是一些 onClickListeners 的片段。
btn_decrement.setOnClickListener {
count.value?.run {
if (this > 0) {
count.value = this - 1
}
}
}
我想做如下的事情:
private val d4Count: MutableLiveData<Int> by lazy {
MutableLiveData<Int>().also { it.value = 0 }
}
set(value) {
if (field.value?.toInt() - value < 0) field.value = 0 else field.value -= value
}
但 Android Studio 给了我 2 个错误:
'val'-property 不能有 setter。这是有道理的,但是有没有办法保持
count
不可变,但是将 changeMutableLiveData<Int>
的设置器更改为与我的尝试类似的东西?委托属性不能具有非默认实现的访问器。我真的不知道这意味着什么,但我假设这是我实现我想要的东西的关键。
我该怎么做呢,还是我看错了?有没有更好的方法来做我想做的事?