美文网首页
Kotlin面向对象之委托属性(Delegated Proper

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

作者: 已迁至知乎_此不再维护 | 来源:发表于2017-05-27 10:08 被阅读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.'")
        }
    }
    

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

    相关文章

      网友评论

          本文标题:Kotlin面向对象之委托属性(Delegated Proper

          本文链接:https://www.haomeiwen.com/subject/ijoffxtx.html