Kotlin的by lazy与lateinit区别

1、by lazy

1.1、by lazy 惰性加载->用到的时候在加载的意思
1.2 by lazy 知道具体值,用到的时候再加载
1.3 by lazy 必须是val修饰,lateinit必须var修饰

2、lateinit 延迟加载

2.1、by lazy 和lateinit 都可以单独使用或者放在成员变量中使用
2.2、lateinit 不知道具体值,后面赋值再使用

package com.kotlin.flong.base


fun main(args :Array){
    //println(name1)
    //println(name1)
    
    val p = Person1()
    p.setUserName("梁寅务")
    println(p.useName)

}

//by lazy 值必须是val,表示不可变的值 ,可以放在成员变量中,可以单独存在,返就是最后一行
//并且by lazy是线程安全的(同步)
val name1 :String by lazy {
    println(" init by lazy") //验证是否调用多次
    "liangjl"
}   
 
class Person1(){
    
    //这种使用表示使用Person1这个类的时候就已经加载了name
    //val name = "张三"
    //使用的时候再加载
    val name by lazy { "张三" }
    
    //lateinit表示不确定,后面可能用到的时候才会赋值,不知道具体是什么值
    lateinit var useName :String
    
    fun setUserName (useName :String){
        this.useName =useName
    }
    
}

你可能感兴趣的:(Kotlin的by lazy与lateinit区别)