我有一个包装数据对象的类。我想
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
有没有办法实现我所要求的而无需反思的方法?
答案 0 :(得分:3)