Делегация собственности Котлина без размышлений - PullRequest
0 голосов
/ 05 июля 2019

У меня есть класс, обертывающий объект данных. И я хочу

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()

Есть ли способ достичь чего-то похожего на то, что я спрашиваю, не задумываясь?

1 Ответ

3 голосов
/ 05 июля 2019
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...