kotlin的by lazy用法

小张哥
2024-04-07 / 0 评论 / 29 阅读 / 正在检测是否收录...

在 Kotlin 中,by lazy 是一种延迟初始化属性的方式。使用 by lazy 可以将属性的初始化推迟到第一次访问该属性时进行,而不是在对象创建时立即进行初始化。这在某些情况下可以提高性能,尤其是对于代价昂贵的初始化操作。

下面是一个简单的示例,演示了如何使用 by lazy

class Example {
    val lazyValue: String by lazy {
        println("computed!") // 这行代码只会在第一次访问属性时执行
        "Hello"
    }
}

fun main() {
    val example = Example()
    println(example.lazyValue) // 第一次访问 lazyValue 属性,会执行初始化操作
    println(example.lazyValue) // 由于 lazyValue 已经被初始化,所以这次不会再执行初始化操作
}

在这个例子中,lazyValue 是一个延迟初始化的属性,它会在第一次访问时执行 lambda 表达式来初始化,然后将结果保存起来。在 main 函数中,我们创建了 Example 对象,并两次访问了 lazyValue 属性。第一次访问时,初始化操作会被执行,输出 "computed!" 并返回 "Hello"。而第二次访问时,由于 lazyValue 已经被初始化,所以不会再次执行初始化操作。

by lazy 的语法是一种方便的方式来实现延迟初始化,但需要注意的是,由于延迟初始化的属性在访问时才会被初始化,因此在多线程环境中需要特别小心。如果多个线程同时访问同一个延迟初始化属性,并且该属性尚未被初始化,可能会导致竞态条件。如果需要在多线程环境中安全地使用延迟初始化属性,可以考虑使用 Lazy 类的 SynchronizedLazyImplSynchronizedLazyImpl 来确保线程安全。

0

评论

博主关闭了所有页面的评论