首页 > 解决方案 > 在 Kotlin 中为 POJO 添加额外的属性

问题描述

我通过 Retrofit 从 API 调用中获得以下模型:

data class User(
    @Expose val id: Int
    @Expose var username: String,
    @Expose var phoneNum: String?,
    @Expose var email: String?,
    @Expose var payments: List<PaymentMethod>
)

出于与此SO 答案相关的原因,我需要添加一个额外的属性。

额外的参数将是一个数据类 PaymentsMethods:

data class PaymentsMethods(
    val paymentMethods: List<PaymentMethod>
)

创建时如何将属性值添加到 User 类?

这是我到目前为止所尝试的:

// add an attribute (with a default value) that won't be filled by the parser.
data class User(
    @Expose val id: Int
    @Expose var username: String,
    @Expose var phoneNum: String?,
    @Expose var email: String?,
    @Expose var payments: List<PaymentMethod>,
    @Expose var paymentsObject: PaymentMethods = PaymentMethods(payments)
)

// create variable and set the value on init
data class User(
    @Expose val id: Int
    @Expose var username: String,
    @Expose var phoneNum: String?,
    @Expose var email: String?,
    @Expose var payments: List<PaymentMethod>
){
init {
    var paymentsObject: PaymentMethods = PaymentMethods(payments)
    }
 }

它们都不起作用。任何建议将不胜感激。

标签: kotlinretrofitpojodata-class

解决方案


我希望这是你需要的:

data class User(
    @Expose val id: Int,
    @Expose var username: String,
    @Expose var phoneNum: String?,
    @Expose var email: String?
) {
    @Expose var payments: List<PaymentMethod> by Delegates.observable(listOf()) { 
        prop, oldValue, newValue ->
        paymentsObject = PaymentMethods(newValue)
    }
    lateinit var paymentsObject: PaymentMethods
}

推荐阅读