У меня есть класс, обертывающий объект данных. И я хочу
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 был четким. Я не пробовал с отражениями, но вижу, что они становятся большими операторами when или весь класс превращается в карту ключ-значение.
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
SomeWrappingClass
. Разрешение звонящим делать myWrap.data.thing = Thing()
Есть ли способ достичь чего-то похожего на то, что я спрашиваю, не задумываясь?