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 ...
随机推荐
- asp.net Ajax调用Aspx后台方法
Ajax调用的前提(以aspx文件为例:) 1.首先需要在aspx文件后台中引用using System.Web.Services; 2.需要调用的方法必须是公共的(public).静态的(stati ...
- win10屏幕变灰怎么解决?
朋友们在使用电脑过程中最高频使用的快捷键可能就是ctrl+c, ctrl+v了,但是殊不知,有时候按的太快产生误触,触发了ctrl+win+c,是屏幕变成了灰色,只需要再次同时按下这三个键就可以恢复彩 ...
- CH 1201 - 最大子序和 - [单调队列]
题目链接:传送门 描述输入一个长度为n的整数序列,从中找出一段不超过m的连续子序列,使得整个序列的和最大. 例如 $1,-3,5,1,-2,3$. 当 $m=4$ 时,$S=5+1-2+3=7$:当 ...
- 10.11JAVA作业
[实验任务一]:素数输出 1. 实验要求: (1)编写判断该数是否为素数的方法,并在主方法中对其进行调用. (2)注意编程规范:程序开头部分的目的,作者以及日期:必要的空格与缩进,适当的注释等: (3 ...
- opencv模板匹配有趣的链接
https://docs.opencv.org/3.0-beta/doc/py_tutorials/py_imgproc/py_template_matching/py_template_matchi ...
- ArcGIS拓扑检查
对于拓扑检查中的等级参数一直不理解,经过参考资料才明白过来: 注:如果有两个要素参与到拓扑,在修复拓扑错误时会优先移动拓扑级别低的要素来满足匹配拓扑规则要求. 参考资料: https://wenku. ...
- Django 的操作
安装: pip install Django 创建django工程 django-admin startproject mysite python manage.py startapp blog / ...
- day0315 迭代器
一. 迭代器 1.什么是可迭代器? 除了数字和布尔值之外,其他数据类型都是可迭代对象.(字符串,列表,元组,字典,集合) 2.可迭代协议 2.1 可以被迭代要满足的要求就叫可迭代协议,可迭代的定义非常 ...
- Flash builder 、flash cs6、 as 3.0研究
1.Flash/Actionscript3 载入资源文件方法考 http://zengrong.net/post/1107.htm 2.使用Flash Professional CS5和Flash B ...
- 在VMware运行Linux下,密码错误的原因
抱歉,没有奏效,请再试一次 密码明明是正确的,但依旧报错 原因: 密码中有大写,但键盘中的大写按键在登录界面无效,需要按住shift才能实现大写.