Kotlin的by lazy与lateinit区别
2019-12-03 本文已影响0人
爱学习的蹭蹭
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<String>){
//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
}
}