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

2017-05-27  本文已影响0人  已迁至知乎_此不再维护

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

  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.'")
    }
}

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

上一篇下一篇

猜你喜欢

热点阅读