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 ... 
随机推荐
- 【数论】Prime Time UVA - 10200 大素数 Miller Robin 模板
			题意:验证1~10000 的数 n^n+n+41 中素数的个数.每个询问给出a,b 求区间[a,b]中质数出现的比例,保留两位 题解:质数会爆到1e8 所以用miller robin , 另外一个优 ... 
- Xcode 9,真机测试,App installation failed
			真机测试:能够build成功,但是 报错App installation failed A valid provisioning profile for this executable was not ... 
- Flink - FlinkKafkaProducer010
			https://ci.apache.org/projects/flink/flink-docs-release-1.3/dev/connectors/kafka.html 使用的方式, DataStr ... 
- 为单实例数据库配置ASM
			环境配置沿用搭建RAC的环境配置 配置ASM可以在数据库软件安装之前进行,也可以在安装完数据库软件配置数据库前进行 [root@rac01 Packages]# cd /etc/yum.repos.d ... 
- 2018/05/11 PHP 设计模式之 适配器模式
			什么是适配器模式? 简单来说,我想买一根充电线,我买一根安卓的?还是买一根苹果的? 我也不确定,因为我以可能会换手机,对于我的形式我也不确定. 所以,我要买一根可以同时适配 安卓/苹果 的线. 所谓适 ... 
- word标题自动编号
			1.打开word文档中多级列表->定义新的多级列表 2.根据下图设置级别对应的标题,然后确定 
- Java List的分段操作
			实现思路: list按sublist的大小截成一定的份数,然后放到一个数组里面, 一下是一个demo例子: public List<List<String>> getSubLi ... 
- 用promise和async/await分别实现红绿灯
			<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ... 
- Dubbo服务化框架使用整理
			一.垂直应用架构拆分 在应用架构的演进过程中,垂直应用架构因为开发便捷,学习成本低,对于实现业务功能的增删改查提供了高效的开发支持,有利于前期业务高速发展的的快速实现.但是随着系统业务功能的不断扩展和 ... 
- C# Asp.net使用FormData对象实现ajax提交表单及上传图片
			1.html代码: <form id="postForm"> 文件名:<input type="text" name="filena ... 
