懒加载
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作为参数,这个参数不保证任何线程安全。