Kotlin provideDelegate
提供委托
这又是一个蛋疼的叫法,其实,就是给A和委托B之间插入一个中间件而已
这个中件间的作用是用了对委托的参数做一个校验
好了,别的不多说,直接给demo
import kotlin.reflect.KProperty
2
3 class dge<T>(t:T) {
4 operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
5 return "$thisRef, 这里委托了 ${property.name} 属性"
6 }
7 }
8
9 class ResourceLoader<T>(id: Int) {
10 operator fun provideDelegate(
11 thisRef: MyUI,
12 prop: KProperty<*>
13 ):dge<T?> {
14 checkProperty(thisRef, prop.name)
15 // 创建委托
16 var t:T?=null
17 return dge(t)
18 }
19
20 private fun checkProperty(thisRef: MyUI, name: String) {println(name)}
21 }
22
23 fun <T> bindResource(id: Int): ResourceLoader<T> { return ResourceLoader<T>(id) }
24
25 class MyUI {
26 val image by bindResource<String>(1)
27 val text by bindResource<String>(2)
28 }
29
30 fun main(args:Array<String>) {
31 val myui: MyUI = MyUI()
32 println(myui.image)
33 }
//结果
image
text
MyUI@357246de, 这里委托了 image 属性
正如你所见:首先,在MyUI对象加载,然后把属性委托对象备齐,也即是答应出属性名称image和text,随后,当你查看M有UI对象的image属性时,委托对象返回属性值:MyUI@357246de, 这里委托了 image 属性
嗯,就是这样。
如果你不明白是么叫做提供委托的话,那么请多看几遍我的Demo,我想,你会有心得的!
不知道你注意到没有,这里用到了星号投影(我去,这样就能用):看来,这个星号投影不能用于类的继承,只能用于类对象的生成声明里面啊,我去,谁能知道呢!
Kotlin provideDelegate的更多相关文章
- Kotlin代理属性--官方文档翻译
代理属性 Delegated Properties 本文为个人翻译的Kotlin官方文档, 原文连接: Delegated Properties 一些特定的常见类型的属性, 尽管我们可以在每次需要的时 ...
- kotlin 委托
委托模式是软件设计模式中的一项基本技巧.在委托模式中,有两个对象参与处理同一个请求,接受请求的对象将请求委托给另一个对象来处理. Kotlin 直接支持委托模式,更加优雅,简洁.Kotlin 通过关键 ...
- Kotlin 委托(2)变量委托是什么、自定义变量委托
1.委托是什么? 1.1 官网示例 在每个变量委托的实现的背后,Kotlin 编译器都会生成辅助对象并委托给它. 假设委托如下, class C { var prop: Type by MyDeleg ...
- Kotlin的Lambda表达式以及它们怎样简化Android开发(KAD 07)
作者:Antonio Leiva 时间:Jan 5, 2017 原文链接:https://antonioleiva.com/lambdas-kotlin/ 由于Lambda表达式允许更简单的方式建模式 ...
- 用Kotlin实现Android定制视图(KAD 06)
作者:Antonio Leiva 时间:Dec 27, 2016 原文链接:https://antonioleiva.com/custom-views-android-kotlin/ 在我们阅读有关c ...
- Kotlin与Android SDK 集成(KAD 05)
作者:Antonio Leiva 时间:Dec 19, 2016 原文链接:https://antonioleiva.com/kotlin-integrations-android-sdk/ 使用Ko ...
- Kotlin的android扩展:对findViewById说再见(KAD 04)
作者:Antonio Leiva 时间:Dec 12, 2016 原文链接:http://antonioleiva.com/kotlin-android-extensions/ 你也许已厌倦日复一日使 ...
- Kotlin类:功能更强、而更简洁(KAD 03)
作者:Antonio Leiva 时间:Dec 7, 2016 原文链接:http://antonioleiva.com/classes-kotlin/ Kotlin类尽可能简单,这样用较少的代码完成 ...
- Kotlin中变量不同于Java: var 对val(KAD 02)
原文标题:Variables in Kotlin, differences with Java. var vs val (KAD 02) 作者:Antonio Leiva 时间:Nov 28, 201 ...
随机推荐
- com.mysql.jdbc.MysqlDataTruncation: Data truncation: Data too long for column 'id' at row 1
1.存储的值超过了字段长度.调整数据库中的字段长度 2,变更字段字符集编码为utf8
- 自建docker swarm体验简单之美
之前用的阿里云容器服务,但由于acsrouting的路由错乱问题,被逼上自建docker swarm的梁山.今天尝试自己搭建docker swarm,竟然轻松搞定,简单的超乎想象. 以下是实际搭建操作 ...
- Codeforces 777C - Alyona and Spreadsheet - [DP]
题目链接:http://codeforces.com/problemset/problem/777/C 题意: 给定 $n \times m$ 的一个数字表格,给定 $k$ 次查询,要你回答是否存在某 ...
- [No000017C]改善C#程序的建议5:引用类型赋值为null与加速垃圾回收
在标准的Dispose模式中(见前一篇博客“C#中标准Dispose模式的实现”),提到了需要及时释放资源,却并没有进一步细说让引用等于null是否有必要. 有一些人认为等于null可以帮助垃圾回收机 ...
- Java 输入/输出——Java虚拟机读写其它进程的数据
使用 Runtime对象的exec()方法可以运行平台上的其它程序,该方法产生一个Process对象,Process对象代表由该Java程序启动的子进程.Process类提供了如下三个方法,用于让程序 ...
- Flink – CEP NFA
看看Flink cep如何将pattern转换为NFA? 当来了一条event,如果在NFA中执行的? 前面的链路,CEP –> PatternStream –> select –> ...
- LeetCode 728 Self Dividing Numbers 解题报告
题目要求 A self-dividing number is a number that is divisible by every digit it contains. For example, 1 ...
- Guava cache 示例
pom.xml <!-- guava --> <dependency> <groupId>com.google.guava</groupId> < ...
- python处理csv文档
在工作中遇到了使用python解析csv文件的问题,包括读写操作,下面参考官网文档,进行一下总结: 首先CSV (Comma Separated Values) ,也就是逗号分开的数值,可以用Note ...
- replace函数的使用(替换单个和全局)
//单个 var aa="1-2-3"; aa=aa.replace(',',"."); console.log(aa); //全局替换 var aa=&quo ...