仅获取对象的接口字段

问题描述 投票:0回答:2

我想将对象简化为它的基本字段(来自接口):

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仍然包含实现接口的类中的所有字段。如何摆脱未在接口中声明的所有字段(在本例中为users-object)?

interface BasicDeliveryAddress {
    var street: String
    // some other fields
}
data class DeliveryAddress (
        override var name: String,
        // override all other fields
) : BasicDeliveryAddress {
    var user: User? = null
}
kotlin
2个回答
1
投票

我对SpringBoot一无所知,所以我不知道这是否可以解决根本问题,但是您可以使用匿名实现将其包装为委托,以掩盖多余的字段。

fun BasicDeliveryAddress.toBasic() = object: BasicDeliveryAddress by this {}

1
投票

投射不会更改基础对象。但是,您可以创建一个仅包含必需字段的新对象。

您可以使用此功能从BasicDeliveryAddress生成DeliveryAddress对象,尽管我不知道您为什么要这么做。

fun copyToInterface(addr: DeliveryAddress): BasicDeliveryAddress =
    object : BasicDeliveryAddress {
        override var name = addr.name
        override var street = addr.street
        override var zip = addr.zip
        override var phone = addr.phone
        override var state = addr.state
        override var additional = addr.additional
        override var id = addr.id
    }

可能有一种更一般的反射方式,但这会更加复杂,可能不必要。

© www.soinside.com 2019 - 2024. All rights reserved.