没有反思的科特林财产委派

时间:2019-07-05 09:15:15

标签: kotlin

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

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
    }

现在,我将公开data的{​​{1}}类。让呼叫者进行SomeWrappingClass

有没有办法实现我所要求的而无需反思的方法?

1 个答案:

答案 0 :(得分:3)

好吧,您可以委托编写get / set手工操作,并支持一些相关问题: