目前,我开始学习Kotlin。我有这样的财产:
var startTime: Int
get() = {
// read value from database
}
set(value) {
// save value to database
}
在这里,每次使用getter和setter时,我总是读写值。
可以将此属性评估为惰性吗?我想在我第一次使用getter并将其缓存用于后续调用时读取一次该值。我知道值可以是惰性的,但是我对变量一无所知。在Kotlin中缓存此属性的正确方法是什么?
答案 0 :(得分:1)
您需要的不是惰性评估,而是支持字段:
private var _startTime: Int? = null
var startTime: Int
get() = {
if (_startTime != null) {
return _startTime!!
} else {
// read value from database and assign it to _startTime
}
}
set(value) {
_startTime = value
// save value to database
}
或者,您可以将_startTime
声明为不可为空,并有一个附加标志private var isStartTimeSet: Boolean = false
用于检查它是否已从数据库中获取。
答案 1 :(得分:0)
Kotlin提供了惰性属性(https://kotlinlang.org/docs/reference/delegated-properties.html#lazy),这些属性是在首次访问时计算并缓存的。
sudo apt-get install apache2
sudo apt-get install php"version"
sudo apt-get install mysql-server
sudo apt-get install phpmyadmin
val lazyValue: String by lazy {
println("computed!")
"Hello"
}
会产生
fun main(args: Array<String>) {
println(lazyValue)
println(lazyValue)
}