首页 > 基础资料 博客日记
Kotlin之lateinit 和 lazy 区别
2024-08-18 09:00:13基础资料围观126次
文章Kotlin之lateinit 和 lazy 区别分享给大家,欢迎收藏Java资料网,专注分享技术知识
在 Kotlin 中,lateinit 和 lazy 都用于延迟初始化变量,但它们有不同的应用场景和使用方式。
lateinit
- 适用类型:只能用于 var 变量,且类型必须是非空类型(不能是基本类型,如 Int、Double 等)。
- 用法:在声明变量时使用 lateinit 关键字,表示该变量将在稍后初始化。
- 初始化时机:可以在任何时候进行初始化,通常在类的构造函数或其他方法中进行。
- 检查是否初始化:可以使用 ::variableName.isInitialized 来检查变量是否已经初始化。
class Example {
lateinit var name: String
fun initializeName() {
name = "Kotlin"
}
fun printName() {
if (::name.isInitialized) {
println(name)
} else {
println("Name is not initialized")
}
}
}
lazy
- 适用类型:只能用于 val 变量。
- 用法:在声明变量时使用 lazy 函数,传入一个 lambda 表达式来提供变量的初始化代码。
- 初始化时机:在第一次访问变量时进行初始化,且初始化过程是线程安全的。
- 缓存结果:初始化后,lazy 会缓存结果,后续访问直接返回缓存值。
class Example {
val name: String by lazy {
println("Initializing name")
"Kotlin"
}
fun printName() {
println(name)
}
}
区别总结
适用范围:
lateinit:只能用于 var 变量,且类型必须是非空类型。
lazy:只能用于 val 变量。
初始化时机:
- lateinit:可以在任何时候初始化,通常在构造函数或方法中。
- lazy:在第一次访问变量时初始化。
线程安全:
- lateinit:不保证线程安全。
- lazy:默认是线程安全的。
检查是否初始化:
- lateinit:可以使用 ::variableName.isInitialized 检查变量是否已经初始化。
- lazy:不需要显式检查,第一次访问时自动初始化。
缓存结果:
- lateinit:不缓存结果,每次访问都使用当前值。
- lazy:初始化后缓存结果,后续访问直接返回缓存值。
使用场景
- lateinit:适用于需要稍后初始化的可变变量,且类型是非空类型。例如,在依赖注入框架中使用 lateinit 来延迟初始化依赖。
- lazy:适用于只读变量,且初始化过程可能比较耗时,需要在第一次访问时延迟初始化。例如,延迟加载配置文件或计算结果。
文章来源:https://blog.csdn.net/Sh_12345/article/details/141057942
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:jacktools123@163.com进行投诉反馈,一经查实,立即删除!
标签: