Kotlin面向对象之委托属性(Delegated Properties)

存在一些常见共用的属性,虽然我们可以在需要时手动实现它们,但一劳永逸地实现并放入库中将非常棒。例子包括:

  1. 懒属性:该值仅在第一次访问时计算
  2. 可观察的属性:该属性变化的时候,观察者将收到通知
  3. 在map中存储属性,而不是每个属性单独一个字段

为了涵盖这些(和其他)情况,Kotlin支持委托属性:

class Example {
    var p: String by Delegate()
}

语法是:val/var <property name>: <Type> by <expression>。by语句之后的表达式是代理,因为与属性对应的get()(和set())将被委派给它的getValue()和setValue()方法。属性代理不必实现任何接口,但是它们必须为var提供一个getValue()函数(和setValue())。 例如:

class Delegate {
    operator fun getValue(thisRef: Any?, property: KProperty<*>): String {
        return "$thisRef, thank you for delegating '${property.name}' to me!"
    }
 
    operator fun setValue(thisRef: Any?, property: KProperty<*>, value: String) {
        println("$value has been assigned to '${property.name} in $thisRef.'")
    }
}

由于知识储备不够,暂时理解不了,待合适的机会继续翻译...

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容