代码之家  ›  专栏  ›  技术社区  ›  Ilker Baltaci

Kotlin数据类中模型继承的改进与接口

  •  0
  • Ilker Baltaci  · 技术社区  · 6 年前

    我有一个get请求,它返回某些特性,其中对象的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的可观察数组。我的目标是根据特性值,将hashmap映射到相应的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>之外,我如何优雅地克服这一点;

    0 回复  |  直到 6 年前