Kotlin修饰符lateinit(延迟初始化) Kotlin修饰符lateinit(延迟初始化)案例详解
ldxlz224 人气:0想了解Kotlin修饰符lateinit(延迟初始化)案例详解的相关内容吗,ldxlz224在本文为您仔细讲解Kotlin修饰符lateinit(延迟初始化)的相关知识和一些Code实例,欢迎阅读和指正,我们先划重点: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, "<set-?>"); 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: lateinit property name has not been initialized
当输出age属性的时候则输出 null
- lateinit 不能用来修饰基本数据类型,因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值
- lateinit不能修饰val变量,只能修饰可变的属性
加载全部内容