Kotlin的lateinit

Posted 怪兽N

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Kotlin的lateinit相关的知识,希望对你有一定的参考价值。

简介

lateinit是延迟初始化属性修饰符,只能修饰var,因为需要在构造方法外修饰它的值,而val属性会被编译成final修饰的字段属性。尽管这个属性是非空的类型,你也不必再构造函数中初始化它。如果在属性被初始化前就访问它,会得到异常“lateinit property has not been initialized”。

注意点

lateinit属性常见的用法是依赖注入。在这种情况下,lateinit属性的值是被依赖注入框架从外部设置的。

Kotlin源码及生成Java对比

kotlin

class Test {
    lateinit var name: String
    fun load(){
        name = "animal"
    }
}

java

public final class Test {
   public String name;

   @NotNull
   public final String getName() {
      String var10000 = this.name;
      if (var10000 == null) {
         Intrinsics.throwUninitializedPropertyAccessException("name");
      }

      return var10000;
   }

   public final void setName(@NotNull String var1) {
      Intrinsics.checkNotNullParameter(var1, "<set-?>");
      this.name = var1;
   }

   public final void load() {
      this.name = "animal";
   }
}

以上是关于Kotlin的lateinit的主要内容,如果未能解决你的问题,请参考以下文章

Kotlin Autowired 问题 - lateinit (obv)

Kotlin中,lateinit 和 lazy{} 的区别

Kotlin - lateinit VS 任何? =空

Kotlin基础 关键字:lateinit和by lazy

kotlin.UninitializedPropertyAccessException:lateinit 属性尚未初始化

Kotlin基础 3.关键字:lateinit(更新中)