У меня много повторяющегося кода, и, поскольку я новичок в 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' не может иметь установщика. Это имеет смысл, но есть ли способ сохранить неизменность
count
, но изменить сеттерMutableLiveData<Int>
на что-то похожее на мою попытку?Делегированное свойство не может иметь методы доступа с реализациями, отличными от стандартных. Я действительно не знаю, что это значит, но я предполагаю, что это ключ к достижению того, чего я хочу.
Как мне это сделать, или я смотрю на это неправильно? Есть ли лучший способ сделать то, что я хочу?