Kotlin 如何编写委托给其他属性的委托?

Kotlin 如何编写委托给其他属性的委托?,kotlin,Kotlin,我试图减少自定义属性getter/setter中的重复代码,这些getter/setter只代理不同层中的相同属性。代码对此进行了更好的解释: var emailText get() = presenter.emailText set(value) { presenter.emailText = value } 我的目标是这样的: var emailText by PropertyDelegate(presenter.emailText) class

我试图减少自定义属性getter/setter中的重复代码,这些getter/setter只代理不同层中的相同属性。代码对此进行了更好的解释:

var emailText
    get() = presenter.emailText
    set(value) {
        presenter.emailText = value
    }
我的目标是这样的:

var emailText by PropertyDelegate(presenter.emailText)
class X(var xProp: String)

class Y(var x: X) {
    var y: String by PropertyDelegate(x::xProp)
}

问题是我找不到正确的语法来引用实际属性而不是它的值。有没有一种简单的方法可以做到这一点?

要获取属性,您可以执行
presenter::emailText
。它返回一个

您可以根据中的描述实现委托:


请注意,此选项只应与可变
var
属性一起使用。

谢谢,这很有帮助!但现在我被实际的委托实现所困扰。有没有一种方法可以在不强制转换和反射的情况下从该KProperty调用getter/setter?类PropertyDelegate(private var property:KProperty):ReadWriteProperty{override fun getValue(thisRef:Any,property:KProperty):T=property.getter.call()作为T override fun setValue(thisRef:Any,property:KProperty,value:T){…}}@pandulapeter写下这个.property.getter.call()和这个.property.getter.set(value)很好的答案谢谢!我有点失望,我无法避免反思,但我想这是有道理的。
class X(var xProp: String)

class Y(var x: X) {
    var y: String by PropertyDelegate(x::xProp)
}