Kotlin修饰符lateinit(延迟初始化)案例详解

网友投稿 714 2022-12-12

Kotlin修饰符lateinit(延迟初始化)案例详解

Kotlin修饰符lateinit(延迟初始化)案例详解

Kotlin定义变量一般有如下写法

lateinit var name: String

var age: String? = null

那么用lateinit 修饰和下面那种有什么区别呢,我们来看一下这两行代码反编译成java代码是什么样子的。

@NotNull

public String name;

@Nullable

private String age;

@NotNull

public final String getName() {

String var10000 = this.name;

if (this.name == null) {

Intrinsics.throwUninitializedPropertyAccessException("name");

}

return var10000;

}

public final void setName(@NotNull String var1) {

Intrinsics.checkParameterIsNotNull(var1, "");

this.name = var1;

}

@Nullable

public final String getAge() {

return this.age;

}

public final void setAge(@Nullable String var1) {

this.age = var1;

}

可以看到在 name 属性添加了 @NotNull注解,并且在getName和setName方法中进行了非空判断

而 age 属性添加了 @Nullable

当我们调用name的时候,会抛出异常

println(AddStr().name)

Exception in thread "main" kotlin.UninitializedPropertyAccessException: lateinitkdUgXzPt property name has not been initialized

当输出age属性的时候则输出 null

lateinit 不能用来修饰基本数据类型,因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值

lateinit不能修饰val变量,只能修饰可变的属性

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:Kotlin lateinit与by lazy案例详解
下一篇:kotlin之协程的理解与使用详解
相关文章

 发表评论

暂时没有评论,来抢沙发吧~