Android 如何在Kotlin的数据类中保存旧数据
我试图使用一个数据类,但我不知道如何正确保存数据 我创建了一个数据类:Android 如何在Kotlin的数据类中保存旧数据,android,kotlin,data-class,Android,Kotlin,Data Class,我试图使用一个数据类,但我不知道如何正确保存数据 我创建了一个数据类: data class SavedValue( var currentValue:String, var previousValue:String = "") 我想要的是每次我想要保存一个新的currentValue,已经保存的current的值将复制到previousValue,新的currentValue覆盖currentValue字段 感谢您的帮助Kotlin中的数据类不应该提供此类功能,因为它们是为保存数据而设计
data class SavedValue( var currentValue:String, var previousValue:String = "")
我想要的是每次我想要保存一个新的currentValue
,已经保存的current
的值将复制到previousValue
,新的currentValue
覆盖currentValue
字段
感谢您的帮助Kotlin中的数据类不应该提供此类功能,因为它们是为保存数据而设计的
您可以只使用一个简单的类。
然而,您可以实现您想要的(有或没有数据类),但是您必须在类内移动
currentValue
,并使用setter(和getter)。在其位置上使用
私有
属性,如\u 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 =
currentValue = ABC and previousValue = abc
这是:
sv.currentValue = "ABC"
println("currentValue = ${sv.currentValue} and previousValue = ${sv.previousValue}")
将打印:
currentValue = abc and previousValue =
currentValue = ABC and previousValue = abc
另外,我认为您需要previousValue
作为只读属性,对吗?因此,也将其移动到类中,并使其setter
私有化:
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
}
}
使用数据类,您试图实现的目标并不是直接的。相反,您可以使用POJO类并使用自定义setter和getter
class SavedValue(currentValue: String, previousValue: String) {
private var _currentValue: String = currentValue
private var _previousValue: String = previousValue
var currentValue: String
get() {
return _currentValue
}
set(value) {
_previousValue = _currentValue
_currentValue = value
}
override fun toString(): String {
return "SavedValue(_currentValue='$_currentValue',
_previousValue='$_previousValue')"
}
}
第一个解决方案工作正常,但如果不希望第三个字段仅保存当前值,则可以执行以下操作:
data class SavedValue(var previousValue: String = "") {
var currentValue: String = ""
set(value) {
if (field != value) previousValue = field
field = value
}
}
例如
产出:
I/System.out:当前:初始值-上一个:
I/System.out:当前:第二个值-上一个:初始值
I/System.out:当前:第三个值-上一个:第二个值
或者,如果需要不可变的previousValue,则需要第三个字段:
data class SavedValue(private var _previousValue: String = "") {
var currentValue: String = ""
set(value) {
if (field != value) _previousValue = field
field = value
}
val previousValue: String
get() = _previousValue
}
在设置新的当前值之前,应覆盖currentValue
setter并设置以前的值。