【Kotlin】类的初始化 ④ ( lateinit 延迟初始化 | ::属性名称.isInitialized 检查属性是否初始化 | lazy 惰性初始化 )
2023-06-13 09:18:07 时间
文章目录
一、lateinit 延迟初始化 ( ::属性名称.isInitialized 检查属性是否初始化 )
在定义属性时 , 可以使用 lateinit 关键字 设置该属性的 延迟初始化 , 在 实例对象 创建时不进行初始化 , 在使用该属性之前对其进行初始化即可 ;
对于 lateinit 延迟初始化 的属性 , 在使用前可以执行
::属性名称.isInitialized
检查 , 查看该属性是否进行了初始化操作 ;
代码示例 :
class Hello{
lateinit var name: String
fun logName() {
if(::name.isInitialized) {
println("name 属性值为 $name")
} else {
println("name 属性没有进行初始化操作")
}
}
}
fun main() {
var hello = Hello()
hello.logName()
hello.name = "Tom"
hello.logName()
}
执行结果 :
name 属性没有进行初始化操作
name 属性值为 Tom
二、lazy 惰性初始化
lazy 惰性初始化 的 属性初始化操作 是 提前定义好的 , 在 调用之前 自动进行初始化操作 , 如果不调用 , 则不进行初始化 ;
lateinit 延迟初始化 的 属性初始化操作 , 需要 手动进行初始化 , 如果忘了初始化直接调用就会报错 ;
代码示例 :
class Hello{
val name by lazy {initName()}
fun initName(): String {
println("初始化 name 属性")
return "Tom"
}
}
fun main() {
// 实例化对象时, name 属性不需要初始化
var hello = Hello()
println("实例对象初始化完毕")
Thread.sleep(1000)
// 在调用 name 属性后, 才初始化 name 属性
println("name = ${hello.name}")
}
执行结果 :
实例对象初始化完毕
初始化 name 属性
name = Tom
相关文章
- spring boot 过滤器_kotlin从入门到进阶实战
- Kotlin 1.4 来了!全新语言特性和更多改进
- Kotlin安卓开发学习-标准函数和静态方法
- 02. Kotlin 变量、常量和类型
- 【Kotlin】IntelliJ IDEA 创建 Kotlin 项目
- 【Kotlin】抽象类 ( 声明 | 抽象类成员 | 抽象类继承 | 抽象方法覆盖 | 抽象方法实现 )
- 【Kotlin】扩展属性 ( 扩展变量属性 | 扩展常量属性 | 注意事项 | 本质分析 )
- 【Kotlin】函数类型 ( 函数类型 | 带参数名称的参数列表 | 可空函数类型 | 复杂函数类型 | 带接收者函数类型 | 函数类型别名 | 函数类型实例化 | 函数调用 )
- 【错误记录】Android Studio 4.2.1 编译报错 ( 设置支持的 Java 和 Kotlin 版本 | java.lang.BootstrapMethodError )
- 【Jetpack】DataBinding 架构组件 ② ( 字符串拼接函数 | 绑定点击事件函数 | DataBinding 布局中使用 import 标签导入 Java、Kotlin 类 )
- 【Kotlin 协程】Flow 操作符 ② ( 末端操作符 | collect 操作符 | reduce 操作符 | single 操作符 | first 操作符 | toList 操作符 )
- 【Kotlin】函数 ② ( Unit 函数 | TODO 函数抛出异常返回 Nothing 类型 | 反引号函数名 )
- 【Kotlin】函数 ③ ( 匿名函数 | 匿名函数的函数类型 | 匿名函数的隐式返回 )
- 【Kotlin】空安全 ④ ( 手动空安全管理 | 空合并操作符 ?: | 空合并操作符与 let 函数结合使用 )
- 【错误记录】Kotlin 代码编译时报错 ( Variable ‘name‘ must be initialized | 初始化块定义在所有属性之后 )
- 【Kotlin】扩展函数 ② ( 扩展属性 | 为可空类型定义扩展函数 | 使用 infix 关键字修饰单个参数扩展函数的简略写法 )
- 17 位谷歌 Android 开发专家是如何看待 Kotlin 的详解编程语言