美文网首页
Kotlin 延迟初始化 (by lazy)

Kotlin 延迟初始化 (by lazy)

作者: 景知育德 | 来源:发表于2021-07-04 18:52 被阅读0次

比如我写了一个Bird类。Bird对象有重量、年龄、颜色、性别等属性。恰好只有黄色的鸟是雄性的。

class Bird (val weight:Double, val age:Int, val color:String) {
    val sex: String = if (color == "yellow") "male" else "female"
}

这样写的话,在初始化的时候,就会初始化val sex这个值。

如果改为by lazy,改为这样:

class Bird (val weight:Double, val agr:Int, val color:String) {
    val sex: String by lazy {
        if (color == "yellow") "male" else "female"
    }
}

注意修改之后没有了=赋值。这样的话,会延迟初始化,这意味着,只有在初次访问sex这个属性的时候,才会进行初始化。by lazy只对val有用,不能作用于var。

另外,系统会给lazy属性加上同步锁,以确保同一时刻只允许一个线程对lazy属性进行初始化,故而lazy是线程安全的。

相关文章

网友评论

      本文标题:Kotlin 延迟初始化 (by lazy)

      本文链接:https://www.haomeiwen.com/subject/abhvultx.html