Добавить дополнительный атрибут в POJO в Котлине - PullRequest
0 голосов
/ 15 ноября 2018

Я получаю следующую модель из вызова API через Retrofit:

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

Ни один из них не работает.Любое предложение будет высоко ценится.

1 Ответ

0 голосов
/ 15 ноября 2018

Надеюсь, это то, что вам нужно:

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
}
...