zoukankan      html  css  js  c++  java
  • 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,我想,你会有心得的!

    不知道你注意到没有,这里用到了星号投影(我去,这样就能用):看来,这个星号投影不能用于类的继承,只能用于类对象的生成声明里面啊,我去,谁能知道呢!

  • 相关阅读:
    Python对象的永久存储
    今天说车,今天吹一波吉利。
    Python 程序能用很多方式处理日期和时间
    Python爬虫1-数据提取-BeautifulSoup4
    优秀的 Java 爬虫项目?
    用Python复制文件的9个方法
    赵孟頫《心经》高清放大单字
    Java遍历Properties的所有的元素
    javaHttps发送POST请求[亲测可用]
    Burp Post、Get数据包转为上传multipart/form-data格式数据包
  • 原文地址:https://www.cnblogs.com/woodzcl/p/7722959.html
Copyright © 2011-2022 走看看