![](/img/trans.png)
[英]Kotlin - How to save data from firebase to livedata with data class?
[英]How to save old data in a data class in Kotlin
我正在嘗試使用數據類,但無法弄清楚如何正確保存數據。
我創建了一個數據類:
data class SavedValue( var currentValue:String, var previousValue:String = "")
我想要的是每次我想要保存一個新的currentValue
,已經為current
保存的值被復制到previousValue
,並且新的currentValue
覆蓋currentValue
字段。
謝謝您的幫助
Kotlin中的數據類不應提供此類功能,因為它們旨在保存數據。
您可以只使用一個簡單的類。
盡管如此,您可以實現所需的內容(使用或不使用數據類),但是您必須在類中移動currentValue
並使用一個setter(和一個getter)。
代替使用_currentValue
這樣的private
屬性:
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
}
}
您要實現的目標並非直接使用數據類 。 相反,您可以使用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
}
}
例如
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}")
輸出:
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
或者,如果您想使用非可變的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
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.