
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属性的时候则输出 nulllateinit 不能用来修饰基本数据类型因为基本类型的属性在类加载后的准备阶段都会被初始化为默认值lateinit不能修饰val变量只能修饰可变的属性到此这篇关于Kotlin修饰符lateinit(延迟初始化)案例详解的文章就介绍到这了,更多相关Kotlin修饰符lateinit(延迟初始化)可以扫描下方二维码免费领取《Kotlin入门教程指南》第一章 Kotlin 入门教程指南 ● 前言第二章 概述 ● 使用 Kotlin 进行服务器端开发 ● 使用 Kotlin 进行 Android 开发 ● Kotlin JavaScript 概述 ● Kotlin/Native 用于原生开发 ● 用于异步编程等场景的协程 ● Kotlin 1.1 的新特性 ● Kotlin 1.2 的新特性 ● Kotlin 1.3 的新特性