Модификация и интерфейс для наследования моделей в классах данных Kotlin - PullRequest
0 голосов
/ 10 января 2019

У меня есть запрос на получение, который возвращает определенные функции, где 11 свойств объектов являются общими. Поскольку классы данных в Kotlin не могут наследоваться от других классов, я решил определить общие свойства со следующим интерфейсом.

interface AccountFeature {
    val feature: String?
    val status: String?
    val id: String?
    val urlLogo: String?
    val minAppVersion: String?
    val target: String?
    val title: String?
    val backgroundColor: String?
    val bodyTextColor: String?
    val bodyText: String?
    val titleTextColor: String?
}

Один из классов данных выглядит следующим образом.

data class AccountFeatureHelp(val privacyStatement: String? = null,
                              val supportFAQ: String? = null,
                              val termsOfService: String? = null,
                              val supportHotline: String? = null,
                              val supportEmail: String? = null,
                              override val feature: String?,
                              override val status: String?,
                              override val id: String?,
                              override val urlLogo: String?,
                              override val minAppVersion: String?,
                              override val target: String?,
                              override val title: String?,
                              override val backgroundColor: String?,
                              override val bodyTextColor: String?,
                              override val bodyText: String?,
                              override val titleTextColor: String?): AccountFeature

Пока все хорошо.

В определении интерфейса моего запроса я ожидаю заметный массив AccountFeature. Моя цель состоит в том, чтобы в зависимости от значения функции сопоставить хеш-карту с соответствующим объектом Feature.

interface  AccountFeaturesAPIService {
    @GET("accounts/{id}/features")
    fun getAccountFeature(@Path("id") id: String): Observable<Array<AccountFeature>>
}

Я получаю следующее исключение во время выполнения.

java.lang.RuntimeException: Unable to invoke no-args constructor for interface com.thinxnet.native_tanktaler_android.core.model.account.feature.AccountFeature. Registering an InstanceCreator with Gson for this type may fix this problem.

Как бы я преодолел это элегантным способом, кроме изменения Observable> на Observable>

...