从数据库读取缓存属性

时间:2018-07-24 07:42:07

标签: kotlin

目前,我开始学习Kotlin。我有这样的财产:

var startTime: Int
    get() = {
        // read value from database
    }
    set(value) {
        // save value to database
    }

在这里,每次使用getter和setter时,我总是读写值。

可以将此属性评估为惰性吗?我想在我第一次使用getter并将其缓存用于后续调用时读取一次该值。我知道值可以是惰性的,但是我对变量一无所知。在Kotlin中缓存此属性的正确方法是什么?

2 个答案:

答案 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)
}