比如我写了一个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是线程安全的。
网友评论