码迷,mamicode.com
首页 > 其他好文 > 详细

Kotlin provideDelegate

时间:2017-10-24 14:02:55      阅读:129      评论:0      收藏:0      [点我收藏+]

标签:插入   kotlin   bind   ref   名称   get   imp   ring   参数   

提供委托

这又是一个蛋疼的叫法,其实,就是给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   bind   ref   名称   get   imp   ring   参数   

原文地址:http://www.cnblogs.com/woodzcl/p/7722959.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!