我正在尝试使用数据类,但无法弄清楚如何正确保存数据。
我创建了一个数据类:
data class SavedValue( var currentValue:String, var previousValue:String = "")
我想要的是每次我想要保存一个新的currentValue
时,已经保存的current
的值将被复制到previousValue
中,而新的currentValue
会覆盖currentValue
字段。
感谢您的帮助
答案 0 :(得分:1)
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
}
}
答案 1 :(得分:0)
要使用数据类来实现目标并非一帆风顺。相反,您可以使用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')"
}
}
答案 2 :(得分:0)
第一个解决方案效果很好,但是如果您不希望第三个字段仅保留当前值,则可以执行以下操作:
/Items/Item/Name
例如
data class SavedValue(var previousValue: String = "") {
var currentValue: String = ""
set(value) {
if (field != value) previousValue = field
field = value
}
}
输出:
val savedValue = SavedValue()
savedValue.currentValue = "initial value"
println("current: ${savedValue.currentValue} - previous: ${savedValue.previousValue}")
savedValue.currentValue = "second value"
println("current: ${savedValue.currentValue} - previous: ${savedValue.previousValue}")
savedValue.currentValue = "third value"
println("current: ${savedValue.currentValue} - previous: ${savedValue.previousValue}")
或者,如果您想使用非可变的previousValue,则需要第三个字段:
I/System.out: current: initial value - previous:
I/System.out: current: second value - previous: initial value
I/System.out: current: third value - previous: second value