有没有一种方法可以将属性值传递给具有相同名称的属性的另一个对象,从而避免使用“重复”代码?

例如,避免CepReceiptsInfovalue是不同的类,但它们共享一些属性名称和类型:

   val cepReceiptsInfo = CepRecepitsInfo()
    cepReceiptsInfo.operationTimestamp = value.operationTimestamp
    cepReceiptsInfo.sentDate = value.sentDate
    cepReceiptsInfo.sentTime = value.sentTime
    cepReceiptsInfo.concept = value.concept
    cepReceiptsInfo.referenceNumber = value.referenceNumber
    cepReceiptsInfo.amount = value.amount
    cepReceiptsInfo.trackingKey = value.trackingKey
    cepReceiptsInfo.bankTarget = value.bankTarget
    cepReceiptsInfo.bankSource = value.bankSource
    cepReceiptsInfo.sourceClienteName = value.sourceClienteName
    cepReceiptsInfo.beneficiaryName = value.beneficiaryName
    cepReceiptsInfo.accountNumberTarget = value.accountNumberTarget
    cepReceiptsInfo.term = value.term
    cepReceiptsInfo.authorizationNumber = value.authorizationNumber
    cepReceiptsInfo.linkCep = value.linkCep
    cepReceiptsInfo.status = value.status
    cepReceiptsInfo.bankSourceRefund = value.bankSourceRefund
    cepReceiptsInfo.causeRefund = value.causeRefund
    cepReceiptsInfo.accountTargetRefund = value.accountTargetRefund
    cepReceiptsInfo.currency = value.currency
    cepReceiptsInfo.accountNumberSource = value.accountNumberSource
    cepReceiptsInfo.accountTypeSource = value.accountTypeSource
    cepReceiptsInfo.accountTypeTarget = value.accountTypeTarget
    cepReceiptsInfo.indicatorRefund = value.indicatorRefund
    cepReceiptsInfo.amountIntRefund = value.amountIntRefund
    cepReceiptsInfo.operationRefundTimestamp = value.operationRefundTimestamp
    cepReceiptsInfo.dateMovement = value.dateMovement
    cepReceiptsInfo.timeMovement = value.timeMovement
    cepReceiptsInfo.dateRefund = value.dateRefund
    cepReceiptsInfo.timeRefund = value.timeRefund

到f.e.这样的东西:
val cepReceiptsInfo = CepReceintsInfo()
cepReceiptsInfo.assignFrom(value)

这两个类都是数据类

最佳答案

我不知道没有反射(reflection)的方法。

fun Any.assignFrom(other: Any) {
    val thisProperties = this::class.memberProperties
        .filterIsInstance<KMutableProperty<*>>()
        .map { it.name to it }
        .toMap()
    for (property in other::class.memberProperties){
        thisProperties[property.name]?.setter?.call(this, property.getter.call(other))
    }
}

10-07 19:43
查看更多