lazy函数,接受一个lambda表达式作为参数,返回一个Lazy<T> 类型的实例,这个实例可以作为委托,实现惰性加载属性;第一次调用get时,将会执行从lazy函数传入的lambda表达式,然后会记住这次结果,以后所有对get调用都只会简单的返回以前记住的结果

fun main(arg: Array<String>) {
println(lazyValue)
println(lazyValue)
println(lazyValue)
} val lazyValue:String by lazy {
println("调用了")
"hello"
}

输出

调用了
hello
hello
hello

默认情况下,惰性加载属性的执行是同步的,属性值只会在唯一一个线程内执行,然后所有线程都将得到同样的属性值,如果委托的初始化函数不需要同步,多个线程可以同时执行初始化函数,那么可以向lazy函数传入一个LazyThreadSafetyMode.PUBLICATION参数

相反,如果你确信初始化函数只可能在一个线程中执行,可以传入LazyThreadSafetyMode.NONE,这种模式不会保持线程同步,因此不会带来这方面的性能损失

kotlin标准委托之惰性装载的更多相关文章

  1. kotlin标准委托之阻止属性的赋值操作

    import kotlin.properties.Delegates fun main(arg: Array<String>) { val user = user() user.name= ...

  2. kotlin标准委托之可观察属性

    所谓可观察属性就是当属性变化时可以拦截其变化,实现观察属性值变化的委托函数是Delegates.observable.该函数接受二个参数,第一个是初始化值,第2个属性值变化事件的响应器.每次我们向属性 ...

  3. .Net Framework中的标准委托和事件_1

    .Net Framework中的标准委托,已经定义在命名空间System中, namespace System { public delegate void EventHandler(object s ...

  4. Kotlin属性委托系统总结与提供委托详解

    属性委托总结回顾: 在前三次已经将Kotlin委托相关的知识点进行了完整的学习了,具体博文如下: https://www.cnblogs.com/webor2006/p/11369019.html h ...

  5. viewSub惰性装载器

    在需要的时候才解析,不耗费资源 <ViewStub android:id="@+id/stub" android:layout_width="wrap_conten ...

  6. kotlin 委托

    委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理. Kotlin 直接支持委托模式,更加优雅,简洁.Kotlin 通过关键 ...

  7. ViewBinding 与 Kotlin 委托双剑合璧

    请点赞关注,你的支持对我意义重大. Hi,我是小彭.本文已收录到 GitHub · Android-NoteBook 中.这里有 Android 进阶成长知识体系,有志同道合的朋友,关注公众号 [彭旭 ...

  8. Kotlin开发语言文档(官方文档)-- 目录

    开始阅读Kotlin官方文档.先上文档目录.有些内容还未阅读,有些目录标目翻译还需琢磨琢磨.后续再将具体内容的链接逐步加上. 文档链接:https://kotlinlang.org/docs/kotl ...

  9. Kotlin 介绍

    Kotlin (0:00) 大家好,我是 Michael Pardo,今天我要给大家展示一下 Kotlin 这门语言,同时看看他如何让你在 Android 开发的时候更开心,更有效率. Kotlin ...

随机推荐

  1. RabbitMQ中初始化ConnectionFactory常用设置属性

    初始化ConnectionFactory 代码 ConnectionFactory factory = new ConnectionFactory(); factory.setHost(ip); fa ...

  2. 安装habse

    1.下载zookeeper-3.4.5.tar.gz, hbase-0.98.6-hadoop2-bin.tar.gz 2.上传到master的 /usr/local/src/目录下,解压zookee ...

  3. MySQL的启动方式

    MySQL常用启动方式: windows 和linux 上都可以使用 mysql --help|grep my.cnf 过滤查看关于MySQL对应 配置文件my.cnf [root@bqh-118 b ...

  4. Computer Vision_18_Image Stitching: Image Alignment and Stitching A Tutorial——2006(book)

    此部分是计算机视觉部分,主要侧重在底层特征提取,视频分析,跟踪,目标检测和识别方面等方面.对于自己不太熟悉的领域比如摄像机标定和立体视觉,仅仅列出上google上引用次数比较多的文献.有一些刚刚出版的 ...

  5. 将excel表格数据转换为sql语句

    今天刚从经理那学到的,迫不及待写下来,以后肯定用得上 1.首先是将excel文件另存为csv格式文件 2.在当前行的最后新增一列,输入下面函数(其中表字段因人而异) =CONCATENATE(&quo ...

  6. ORACLE SQL性能优化汇总

    ORACLE SQL语句共享 Oracle SQL语句具备共享特性,为了不让ORACLE数据库重复解析相同的简单单表SQL语句,ORACLE在SGA系统共享区域内SBP共享池内存放的SQL语句将被所有 ...

  7. HTTP通过Get请求传递参数时特殊字符被转码的处理方式

    有些符号在URL中是不能直接传递的,如果要在URL中传递这些特殊符号,那么就要使用他们的编码了. 编码的格式为:%加字符的ASCII码,即一个百分号%,后面跟对应字符的ASCII(16进制)码值.例如 ...

  8. Spring-使用JAVA的方式配置Spring-代理模式

    9.使用Java的方式配置Spring 我们现在要完全不使用Spring的xml配置了,全权交给Java来做! JavaConfig是Spring的一个子项目,在Spring4之后,它成为了一个核心功 ...

  9. C语言I作业12一学期总结

    一.我学到的内容 二.我的收获 作业 收获 C语言I博客作业01 学会了编程"Hello word" C语言I博客作业02 安装编译器,将代码建立在自己的文件里面 C语言I博客作业 ...

  10. python3.6 创建字典三法

    这里献丑给出 python 3.6 创建字典变量的三法 其一:阳春白雪法:直接声明  mydic = {"name":"徐晓冬","age" ...