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