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





Ну, вы можете делегировать написание get/set вручную и голосовать за некоторые связанные вопросы: