我想将对象简化为它的基本字段(来自接口):
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
}
我对SpringBoot一无所知,所以我不知道这是否可以解决根本问题,但是您可以使用匿名实现将其包装为委托,以掩盖多余的字段。
fun BasicDeliveryAddress.toBasic() = object: BasicDeliveryAddress by this {}
投射不会更改基础对象。但是,您可以创建一个仅包含必需字段的新对象。
您可以使用此功能从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
}
可能有一种更一般的反射方式,但这会更加复杂,可能不必要。