当前位置:网站首页>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变量上。(不一定完全,待补充)
边栏推荐
- 网络基础(三)01-网络的基础概念——URL地址组成之协议、主机地址、路径和参数&127.0.0.1本地回环地址& 查看网址IP地址并访问之ping空格+网址&netstat -anb查看本机占用端口
- leetcode-684:冗余连接
- scrapy基本使用
- 设计消息队列存储消息数据的 MySQL 表格
- ROS 节点初始化步骤、topic/service创建及使用
- 毕业1年从事软件测试拿下11.5k,没有给98后丢脸吧...
- 二分答案裸题(加一点鸽巢原理)
- LeetCode Exercise - Two Questions About Finding Sum of Array Elements
- 6块钱1斤,日本公司为何来中国收烟头?
- Redis for infrastructure
猜你喜欢

MySQL【单行函数】

Critical Reviews | 南农邹建文组综述全球农田土壤抗生素与耐药基因分布

This year..I sincerely recommend the professional engineer to upgrade to the book!

深化校企合作 搭建技术技能人才成长“立交桥”

Quickly build an e-commerce platform based on Amazon cloud technology serverless service - performance

2022鹏城杯web

5分钟搞懂MySQL - 行转列

沃尔沃中国的年中总结,在“安全感”中寻找未来

博纳影通过IPO注册:阿里腾讯是股东 受疫情冲击明显

One year after graduation, I was engaged in software testing and won 11.5k. I didn't lose face to the post-98 generation...
随机推荐
时序数据库在船舶风险管理领域的应用
MySQL data types
Graphic LeetCode -- 11. Containers of most water (difficulty: medium)
【总结】1396- 60+个 VSCode 插件,打造好用的编辑器
智慧中控屏
core sound driver详解
CMake library search function does not search LD_LIBRARY_PATH
What kind of framework is friendly to developers?
LeetCode Exercise - Two Questions About Finding Sum of Array Elements
layaBox---TypeScript---接口
5分钟搞懂MySQL - 行转列
MySQL中的存储过程(详细篇)
线性筛求积性函数
What is an ultrasonic flaw detector used for?
深化校企合作 搭建技术技能人才成长“立交桥”
LayaBox---TypeScript---基础数据类型
CMake库搜索函数居然不搜索LD_LIBRARY_PATH
The sixteenth issue of eight-part article Balabala said (MQ)
攻防世界web-Cat
使用postman调接口报Content type ‘text/plain;charset=UTF-8‘ not supported