欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 文旅 > 手游 > 拆解Kotlin中的by lazy:从语法糖到底层实现

拆解Kotlin中的by lazy:从语法糖到底层实现

2025/2/8 8:31:39 来源:https://blog.csdn.net/yzpbright/article/details/145497621  浏览:    关键词:拆解Kotlin中的by lazy:从语法糖到底层实现

by lazy 是Kotlin中一个强大的属性委托机制,它主要用于实现属性的延迟初始化。所谓延迟初始化,就是在第一次访问该属性时才进行初始化,而不是在对象创建时就立即初始化。这种机制在很多场景下都能带来性能优势,特别是当属性的初始化成本较高或者属性可能不会被使用时。

基本使用示例

class MainActivity : AppCompatActivity() {private val viewModel by lazy { FooApplication.pollingViewModel }
}

这段代码看似简单,但实际上包含了很多重要的特性:

  1. 线程安全性:默认情况下是同步的,确保只初始化一次
  2. 值缓存:初始化后的值会被缓存,后续访问直接返回缓存的值
  3. 代码简洁:不需要显式处理null检查和初始化逻辑

揭秘by lazy的底层实现

如果不使用 by lazy 这个语法糖,要实现相同的功能,代码会是这样的:

class MainActivity : AppCompatActivity() {private var _viewModel: PollingViewModel? = nullprivate val viewModel: PollingViewModelget() {if (_viewModel == null) {synchronized(this) {if (_viewModel == null) {_viewModel = FooApplication.pollingViewModel}}}return _viewModel!!}
}

这个实现展示了 by lazy 的核心原理:

  • 使用可空的后备字段存储实际值
  • 通过getter方法控制初始化逻辑
  • 使用双重检查锁定模式确保线程安全
  • 缓存初始化后的值避免重复计算

参考:

https://juejin.cn/post/7463130840308318245

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com