Kotlin随笔 委托属性之延迟加载
来源:互联网 发布:淘宝投诉虚假发货 编辑:程序博客网 时间:2024/05/03 02:05
委托属性
简介
1、委托属性,就是对其属性值的操作不再依赖于其自身的getter()/setter()方法,是将其托付给一个代理类。
2、当我们使用属性的get或者set的时候,属性委托的getValue和setValue就会被调用。
定义语法:
val/var <property name>: <Type> by <expression>
- var/val:属性类型(可变/只读)
- name:属性名称
- Type:属性的数据类型
- expression:代理类
- by关键字之后的表达式就是委托,属性的get()方法(以及set() 方法)将被委托给这个对象的 getValue()和setValue()方法.属性委托不必实现任何接口, 但必须提供 getValue() 函数(对于 var属性,还需要 setValue() 函数)。
lazy:延迟加载
1、 lazy提供了初始化的方法,不过真正初始化这个动作发生的时机却是在第一次被使用时。
2、 lazy()是一个函数, 可接受一个Lambda表达式作为参数,第一次调用将会执行 Lambda 表达式,以后调用该参数返回以前记住的结果.
3、 可以理解为lazy{…}函数的最后一行为返回值
4、 lazy只能实现对属性为val的初始化,对于var需要用lateinit
5、 lateinit的使用有很多限制的,比如只能在不可null的对象上使用,不能为primitives(Int、Float之类)等等
eg1、最后一行为返回值
val str: String by lazy{ "jane" "marry" "jake"}fun main(args: Array<String>) { println(str)}/* 输出: * jake */
eg2、第一次调用执行lazy()中的lambda表达式,并返回值;以后调用直接返回记录的值
val lazyValue: String by lazy { println("computed!") "Hello"}fun main(args: Array<String>) { println(lazyValue) println(lazyValue)}/* 输出: * computed * Hello * Hello */
eg3、
val list: MutableList<BaseChannelgroup> by lazy { val baseList = mutableListOf<BaseChannelgroup>() dataList.forEach { if (it.baseChannelgroupList.size > 0) { baseList.add(it) baseList.addAll(it.allShowedChildren) } else { baseList.add(it) } } baseList } //调用list时,baseList即为list
0 0
- Kotlin随笔 委托属性之延迟加载
- Hibernate延迟加载之属性延迟加载
- Kotlin-委托属性
- kotlin委托属性+SharedPreference实例
- Hibernate属性延迟加载
- Kotlin学习之委托机制
- 19、H5新增js属性之js延迟加载
- Kotlin-20.代理/委托属性(delegated properties)
- kotlin学习笔记——委托属性
- Kotlin的委托属性和区间
- Kotlin开发Android笔记11:Kotlin中属性委托
- 学习kotlin第十天_对象、委托、委托属性
- Kotlin Reference (十四) 委托类和委托属性
- Hibernate3中的属性延迟加载
- Hibernate 延迟加载类属性
- Extjs之延迟加载
- 延迟加载之ViewStub
- MyBatis之延迟加载
- java内存区域与内存溢出异常
- 2分钟上手Echarts
- oracle 9i/10g/11g(11.2.0.3)安装包和PATCH下载地址汇总
- 书摘《人人都是产品经理》——4年产品经理思维书6
- 懒人福利【内表比较】
- Kotlin随笔 委托属性之延迟加载
- AM335x——AR8031网卡芯片寄存器分析
- 如何安装mysl数据库
- caffe_pvanet,cuda7.5,VS2013
- elasticsearch 运维记录
- jvm虚拟机-什么是jvm
- Maven仓库管理器Nexus的安装配置
- 解决Fatal error: Maximum execution time of 30 seconds exceeded in...的问题
- Java WebService 简单实例