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变量,只能修饰可变的属性

到此这篇关于Kotlin修饰符lateinit(延迟初始化)案例详解的文章就介绍到这了,更多相关Kotlin修饰符lateinit(延迟初始化)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
相关文章
java如何通过FileOutputStream字节流向文件中写数据
这篇文章主要介绍了java如何通过FileOutputStream字节流向文件中写数据问题,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教2022-12-12
@scope("prototype") @loadbalanced注解负载均衡失效问题
这篇文章主要为大家介绍了@scope("prototype") @loadbalanced注解负载均衡失效问题解决,有需要的朋友可以借鉴参考下,希望能够有所帮助,祝大家多多进步,早日升职加薪2023-02-02
SpringBoot项目从18.18M瘦身到0.18M的实现
本文主要介绍了SpringBoot项目从18.18M瘦身到0.18M的实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧2023-01-01
Java中基于注解的代码生成工具MapStruct映射使用详解
MapStruct 作为一个基于注解的代码生成工具,为我们提供了一种更加优雅、高效的解决方案,本文主要为大家介绍了它的具体使用,感兴趣的可以了解下2025-02-02
全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制
这篇文章主要介绍了全面解析Hibernate关联操作、查询操作、高级特性、并发处理机制的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下2016-06-06


最新评论