Kotlin修饰符lateinit(延迟初始化)案例详解
1.概述在本文中,我们将研究Kotlin语法最有趣的特性之一,——延迟初始化。
我们还将研究
lateinit
关键字,它允许我们欺骗编译器,在类的主体中而不是在构造函数中初始化非空字段——。
2.Java中的延迟初始化模式有时候我们需要用繁琐的初始化过程来构造对象。此外,我们通常不能确定我们在程序开始时为其支付初始化成本的对象是否会在我们的程序中使用。
- 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.throwUninitializedPropertyAccessExcept[**io**](https://www.lsjlt.com/tag/io/)n("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(延迟初始化)可以扫描下方二维码免费领取!
《Kotlin入门教程指南》
第一章 Kotlin 入门教程指南
● 前言
第二章 概述
● 使用 Kotlin 进行服务器端开发
● 使用 Kotlin 进行 Android 开发
● Kotlin JavaScript 概述
● Kotlin/Native 用于原生开发
● 用于异步编程等场景的协程
● Kotlin 1.1 的新特性
● Kotlin 1.2 的新特性
● Kotlin 1.3 的新特性