lateinit by lazy
2020-07-26 本文已影响0人
小虫虫奇遇记
Kotlin中延迟初始化的方法:
lateinit , by lazy
lateinit用在var变量,作用:编译器检查时不因为变量未初始化而报错。
private lateinit var mRootView: View
然后在inflateView之后再对变量进行赋值,使用的时候默认非空
by lazy 属性委托, 用在val常量(相当于java 中final变量):
private val a: Int by lazy { 5 }
虽然两者都可以推迟属性初始化的时间,但是lateinit var只是让编译期忽略对属性未初始化的检查,后续在哪里以及何时初始化还需要开发者自己决定。
而by lazy真正做到了声明的同时也指定了延迟初始化时的行为,在属性被第一次被使用的时候才自动初始化,且保证了线程安全。