懒加载

lazy()方法接收一个lambda表达式,并且返回Lazy<T>实例,该实例作为懒加载属性的委派。首次调用getter方法时会执行传递的lambda表达式值,接下来的调用将直接返回第一次计算出的值。

val lazyValue: String by lazy {
    println("computed!")
    "Hello"
}
fun main(args: Array<String>) {
    println(lazyValue)
    println(lazyValue)
}

将会打印出:

computed!
Hello
Hello

默认情况下,懒加载属性的计算是同步的。值的计算在一个线程中,其他的所有线程将获取到相同的值。如果同步的初始化委派不是必须的,因此多个线程有可能同时的执行,此时需要传递LazyThreadSafetyMode.PUBLICATION作为lazy函数的参数。如果你很确定初始化永远只会在一个线程中执行,也可以传递LazyThreadSafetyMode.NONE作为参数,这个参数不保证任何线程安全。

results matching ""

    No results matching ""