当前位置:网站首页>kotlin的by lazy
kotlin的by lazy
2022-07-30 18:23:00 【zhangjin1120】
平时哪里用到了?
private val pageAdapter by lazy {
PagerAdapter(this@MainActivity) }
private val alarmFragment by lazy {
AlarmFragment() }
private val timerFragment by lazy {
TimerFragment() }
官网上怎么描述的?
https://kotlinlang.org/docs/idioms.html#lazy-property
kotlin中文站:习惯用法
如下图:by lazy
属于习语(idioms
),从注释可以看出:变量只在第一次被访问时被加载。

by lazy只能作用于val关键字标注的属性。
当属性用到的时候才会初始化”lazy{}”里面的内容
而且再次调用属性的时候,只会得到结果,而不会再次执行lazy{}的运行过程
和java的单例模式有关系吗?
关于kotlin的单例模式,这篇文章讲的非常清楚:205赞:Kotlin下的5种单例模式
多数情况下,by lazy修饰的val变量都是单例的,因为by lazy{}里面的代码只执行一次。可以验证下:
class SingleTonTest {
val name: String = "zhangjin"
}
fun main(args: Array<String>) {
val s: SingleTonTest by lazy {
println("s初始化")
SingleTonTest()
}
for (i in 0 until 5) {
println(s.name)
}
}
此外,by lazy与双重校验锁单例模式有关系。把代码列出如下:
class SingletonDemo private constructor() {
companion object {
val instance: SingletonDemo by lazy(mode = LazyThreadSafetyMode.SYNCHRONIZED) {
SingletonDemo()
}
}
}
用by lazy修饰的目的是什么?
这篇文章讲的蛮详细了:浅谈Kotlin(六):lateinit、by lazy 使用
简单的说:
- by lazy 想达到一个目的,变量只做声明,被调用的时候再初始化。
- 只被初始化一次。
和lateinit的区别是什么?
lateinit
(延迟初始化属性)(只能用在var变量上),by lazy
只能用在val变量上。(不一定完全,待补充)
边栏推荐
- Informatics Olympiad All-in-One 1966: [14NOIP Popularization Group] Scale Simplification | Luogu P2118 [NOIP2014 Popularization Group] Scale Simplification
- 沉浸式体验科大讯飞2022消博会“官方指定产品”
- 图解LeetCode——11. 盛最多水的容器(难度:中等)
- CCNA-NAT协议(理论与实验练习)
- 攻防世界web-Cat
- 你好,我的新名字叫“铜锁/Tongsuo”
- What are the applications of X-rays?
- 基础架构之Redis
- [OC study notes] attribute keyword
- Mysql brush dirty several scenarios and related parameters
猜你喜欢
Hangzhou electric school game 2 1001 2022 Static Query on Tree (Tree + hash table difference chain subdivision
分布式消息队列平滑迁移技术实战
Kettle(二):连接SQL Server数据库
【HMS core】【FAQ】HMS Toolkit典型问题合集1
宽带射频放大器OA4SMM4(1)
毕业1年从事软件测试拿下11.5k,没有给98后丢脸吧...
ByteArrayInputStream 类源码分析
Linux-安装MySQL(详细教程)
高性能短链设计
Network Basics (3) 01-Basic Concepts of Networks - Protocols, Host Addresses, Paths and Parameters of URL Addresses & 127.0.0.1 Local Loopback Address & View URL IP Address and Access Ping Space + URL
随机推荐
CCNA-ACL(访问控制列表)标准ACL 扩展ACL 命名ACL
OSPF详解(3)
MySQL中的存储过程(详细篇)
Kettle--MySQL生产数据库千万、亿级数据量迁移方案及性能优化
Graphic LeetCode -- 11. Containers of most water (difficulty: medium)
【HarmonyOS】【FAQ】鸿蒙问题合集4
【HMS core】【FAQ】HMS Toolkit典型问题合集1
LayaBox---TypeScript---变量声明
【HMS Core】【FAQ】运动健康、音频编辑、华为帐号服务 典型问题合集7
OSPF详解(4)
强啊,点赞业务缓存设计优化探索之路。
One year after graduation, I was engaged in software testing and won 11.5k. I didn't lose face to the post-98 generation...
【开发者必看】【push kit】推送服务典型问题合集3
怎么样的框架对于开发者是友好的?
深化校企合作 搭建技术技能人才成长“立交桥”
分布式消息队列平滑迁移技术实战
while,do while,for循环语句
Basic knowledge points in js - BOM
Vulkan与OpenGL对比——Vulkan的全新渲染架构
ESP8266-Arduino编程实例-BMP180气压温度传感器驱动