当前位置:网站首页>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变量上。(不一定完全,待补充)
边栏推荐
猜你喜欢
OSPF详解(3)
One year after graduation, I was engaged in software testing and won 11.5k. I didn't lose face to the post-98 generation...
线性筛求积性函数
【HMS core】【ML Kit】机器学习服务常见问题FAQ(二)
Pagoda builds PHP adaptive lazy website navigation source code measurement
LeetCode 练习——关于查找数组元素之和的两道题
OSPF详解(4)
NC | 西湖大学陶亮组-TMPRSS2“助攻”病毒感染并介导索氏梭菌出血毒素的宿主入侵...
Ecplise执行C语言报错:cannot open output file xxx.exe: Permission denied
ESP8266-Arduino编程实例-BMP180气压温度传感器驱动
随机推荐
leetcode-547:省份数量
CCNA-ACL(访问控制列表)标准ACL 扩展ACL 命名ACL
Mysql执行原理剖析
LeetCode 952. 按公因数计算最大组件大小
MySQL data types
基础架构之Mongo
沃尔沃中国的年中总结,在“安全感”中寻找未来
【HarmonyOS】【ARK UI】HarmonyOS ets语言怎么实现双击返回键退出
A senior with 13 years of experience in software testing, summed up 5 test employment suggestions....
[Solved] The problem that Unity Hub fails to obtain a license or does not respond and cannot develop
沉浸式体验科大讯飞2022消博会“官方指定产品”
leetcode-684:冗余连接
毕业1年从事软件测试拿下11.5k,没有给98后丢脸吧...
432.4 FPS 快STDC 2.84倍 | LPS-Net 结合内存、FLOPs、CUDA实现超快语义分割模型
Codeblocks + Widgets create window code analysis
线性筛求积性函数
二分答案裸题(加一点鸽巢原理)
What kind of framework is friendly to developers?
SQL行列转换
3D机器视觉厂商的场景争夺战役