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