简介
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";
}
}