Kotlin修饰符lateinit(延迟初始化)案例详解
- Kotlin定义变量一般有如下写法
lateinit var name: String var age: String? = null
那么用lateinit 修饰和下面那种有什么区别呢,我们来看一下这两行代码反编译成java代码是什么样子的。
@NotNullpublic String name; @Nullableprivate String age; @NotNullpublic 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; }@Nullablepublic 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(延迟初始化)案例详解的文章就介绍到这了,更多相关Kotlin修饰符lateinit(延迟初始化)内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!
推荐阅读
- Shell-Bash变量与运算符
- 一起来学习C语言的字符串转换函数
- C语言字符函数中的isalnum()和iscntrl()你都知道吗
- 字符串拼接成段落,换行符(\n)如何只执行n-1次
- 爬虫数据处理HTML转义字符
- android防止连续点击的简单实现(kotlin)
- C语言的版本比较
- retrofit2-kotlin-coroutines-adapter|retrofit2-kotlin-coroutines-adapter 超时引起的崩溃
- Kotlin泛型的高级特性(六)
- Kotlin基础(10)-代理模式在kotlin中的使用