lateinit
和 lazy
是 Kotlin 中的两种不同的延迟初始化技术。
在 Kotlin 使用中,很可能搞不清楚它们的使用场景和方法。下面就来做一个理清:
lateinit
只用于var
,而lazy
只用于val
lateinit
和lazy
都不能有 自定义的 getter 和 setter,但是可以对 getter 和 setter 进行可见符修饰lazy
应用于单例模式(if-null-then-init-else-return
),而且当且仅当变量被第一次调用的时候,委托方法才会执行。lateinit
则用于只能生命周期流程中进行获取或者初始化的变量,比如 Android 的onCreate()
- 当单例对象需要使用外界参数来进行构造时,内部的该参数对应的属性应使用
lateinit
比如说网络
ApiManager
需要context
来进行获取缓存的操作;
那么,ApiManager
中的context
属性就必须使用lateinit
这是因为,
lazy
使用委托方法来进行变量初始化,而委托方法不能从外界获取参数,但是lateinit
可以通过一个init(context: Context)
来获取到相应的外界参数来初始化属性。