【问题标题】:Kotlin property delegation without reflection没有反射的 Kotlin 属性委托
【发布时间】:2019-07-05 09:15:15
【问题描述】:

我有一个包装数据对象的类。我想

class SomeWrappingClass {

    lateinit var data: SomeDataHolder

    // Want to 'forward' many properties to the data class

    var thing0: String? by data
    var thing1: String? by data
    var thing2: String? by data
}

或者更现实地像:

var thing0: String? by data.thing0

以下功能可以实现,但据我了解,它们使用反射,我想保持 SomeDataHolder 清晰。我没有尝试过反射,但我看到它们要么变得很大,要么变成了一个键值映射。

SomeDataHolder {

    operator fun getValue(internationalTransferViewModel: SomeWrappingClass, property: KProperty<*>): String? {
    TODO("not implemented")
    }

    operator fun setValue(internationalTransferViewModel: SomeWrappingClass, property: KProperty<*>, s: String?) {
    TODO("not implemented")
    }

所以基本上有一个更短的方法来写这个:

var thing: String?
    get() = data.thing
    set(value) {
        data.thing = value
    }

现在我要公开SomeWrappingClassdata 类。让来电者做myWrap.data.thing = Thing()

有没有一种方法可以不经反思就实现我所要求的目标?

【问题讨论】:

    标签: kotlin


    【解决方案1】:
    猜你喜欢
    • 1970-01-01
    • 2012-06-04
    • 2017-08-01
    • 2015-09-02
    • 2018-10-04
    • 1970-01-01
    • 2023-04-02
    • 2011-04-09
    • 1970-01-01
    相关资源
    最近更新 更多