Получить только поля интерфейса kotlin -объект - PullRequest
1 голос
/ 28 мая 2020

Я хочу уменьшить объект до его базовых c полей (исходящих из интерфейса):

override fun findBasicById(deliveryAddressId: Long): BasicDeliveryAddress? {
    val basicDeliveryAddress = findById(deliveryAddressId) as BasicDeliveryAddress? // returns a DeliveryAddress object
    return basicDeliveryAddress // Here I still get the full DeliveryAddress!
}

Однако basicDeliveryAddress по-прежнему содержит все поля из класса, реализующего интерфейс. Как мне избавиться от всех полей, не объявленных в интерфейсе (в данном случае от объекта-пользователя)?

interface BasicDeliveryAddress {
    var street: String
    // some other fields
}
data class DeliveryAddress (
        override var name: String,
        // override all other fields
) : BasicDeliveryAddress {
    var user: User? = null
}

1 Ответ

4 голосов
/ 28 мая 2020

Я ничего не знаю о SpringBoot, поэтому не знаю, решит ли это проблему root, но вы можете использовать анонимную реализацию, которая обертывает ее как делегата, чтобы скрыть дополнительные поля.

fun BasicDeliveryAddress.toBasic() = object: BasicDeliveryAddress by this {}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...