Класс данных в Kotlin не должен предоставлять такие функции, так как они предназначены для хранения данных.
Вы можете просто использовать простой класс.
Тем не менее, вы можете достичь того, что вы хотите (с или без класса данных), но вам нужно будет переместиться currentValue
внутрь класса и использовать установщик (и получатель).
Вместо него используйте свойство private
, например _currentValue
:
data class SavedValue(private var _currentValue: String, var previousValue: String = "") {
var currentValue: String
get() = _currentValue
set(value) {
previousValue = _currentValue
_currentValue = value
}
}
Этот код:
val sv = SavedValue("abc")
println("currentValue = ${sv.currentValue} and previousValue = ${sv.previousValue}")
напечатает:
currentValue = abc and previousValue =
и это:
sv.currentValue = "ABC"
println("currentValue = ${sv.currentValue} and previousValue = ${sv.previousValue}")
напечатает:
currentValue = ABC and previousValue = abc
Кроме того, я думаю, что вам нужно previousValue
как свойство только для чтения , верно?
Так что переместите его внутрь класса и сделайте его установщиком private
:
data class SavedValue(private var _currentValue: String) {
var _previousValue: String = ""
var currentValue: String
get() = _currentValue
set(value) {
previousValue = _currentValue
_currentValue = value
}
var previousValue: String
get() = _previousValue
private set(value) {
_previousValue = value
}
}