lazylateinit 是Kotlin中两种不同的延迟初始化技术

lazy(懒初始化)

只能用于 val 修饰的变量

  1. val myUtil by lazy {
  2. MyUtil(parameter1, parameter2)
  3. }

创建了一个 MyUtil 类型的对象。但这只会发生在第一次使用 myUtil 的时候。

使用场景:

  • 单例变量构建(if-null-then-init-else-return)
 MyUtil getMyUtil() {
    if (myUtil == null) myUtil = new MyUtil(param1, param2);
    return myUtil;
}

lateinit(延迟初始化)

只能用于 var 修饰的变量

lateinit var myUtil: MyUtil

在后续某个时机去初始化 myUtil, 分离了变量的初始化和定义

如何选择:

  1. 如果是值可修改的变量(即在之后的使用中可能被重新赋值),使用 lateInit 模式

  2. 如果变量的初始化取决于外部对象(比如网络接口数据),使用 lateInit 模式,能较好的检查数据是否是Null

  3. 如果变量仅仅初始化一次并且全局共享,且更多的是内部使用(依赖于类内部的变量),使用 lazy 模式。