kotlin - lateinit var 、by lazy 区别
lateinit var:延迟初始化,先声明,后初始化。可能会出现空指针,不推荐使用
不能是基本类型(Int, Boolean),必须是非空类型(String,View)
手动初始化,在某个时刻赋值,否则会奔溃
lateinit var username: String
by lazy:首次访问才初始化,适合懒加载。
用于val变量,初始化后不可变,支持任何类型(包括基本类型)
自动初始化,第一次访问时执行初始化代码
线程安全
val lazyValue: String by lazy {
println("computed!") // 第一次调用输出,第二次调用不执行
"Hello"
}