Kotlin委托之提供委托理解

提供委托

通过定义 provideDelegate 操作符,可以扩展创建属性实现所委托对象的逻辑。 如果 by 右侧所使用的对象将 provideDelegate 定义为成员或扩展函数,那么会调用该函数来 创建属性委托实例。

provideDelegate 的一个可能的使用场景是在创建属性时(而不仅在其 getter 或 setter 中)检查属性一致性。

例如,如果要在绑定之前检查属性名称,可以这样写:

class ResourceLoader<T>(id: ResourceID<T>) {
    operator fun provideDelegate(
            thisRef: MyUI,
            prop: KProperty<*>
    ): ReadOnlyProperty<MyUI, String> {
        checkProperty(thisRef, prop.name)
        // 创建委托
        return object: ReadOnlyProperty<MyUI, String> {
            override fun getValue(thisRef: MyTestClass, property: KProperty<*>): String {
                return "aaa" 
            }   
        } 
    }

    private fun checkProperty(thisRef: MyUI, name: String) { …… }
}

fun <T> bindResource(id: ResourceID<T>): ResourceLoader<T> { …… }

class MyUI {
    val image by bindResource(ResourceID.image_id)
    val text by bindResource(ResourceID.text_id)
}

class ResourceID() {
    val image_id: String = "2345715"
    val text_id: String = "35678412"
}

 

上面这一段是从菜鸟教程中复制过来的,代码部分添加了创建委托这一段,提供委托的功能很明确,只是我个人在看这段代码时出现了一些疑惑,故在此记录一下

prop.name,此处prop指的是被委托属性对象,因此prop.name就是属性的名称,在 checkProperty(thisRef, prop.name)中即可自行检查属性一致性,检查无误后,即可通过返回的getValue完成属性委托

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值