Kotlin-将对象转换为可包裹的

时间:2020-11-11 11:59:04

标签: android kotlin

嗨,我有一个普通的数据类

        1-migr migr/2 0      0      migr/2
        migr/2 1-migr migr/2 0      0     
  M =   0      migr/2 1-migr migr/2 0     
        0      0      migr/2 1-migr migr/2
        migr/2 0      0      migr/2 1-migr

及其@Parcelize版本

data class Message(
    val code: Int,
    val message: String?
)

现在如何编写转换器,以便我可以将类1映射到1?

2 个答案:

答案 0 :(得分:0)

您无需创建一些特殊的逻辑即可进行转换。您唯一要做的就是使用MessagePresentation对象的字段创建Message对象。

...
val message = Message(code, message)
val messagePresentation = MessagePresentation(message.code, message.message)
...

例如,您可以在MessagePresentation类中使用Message arg指定其他构造函数。

您还可以像这样创建扩展功能

fun Message.toPresentation(): MessagePresentation =
    MessagePresentation(
        code = code
        message = message
    )

答案 1 :(得分:0)

您可以通过多种方式实现这一目标:

  1. 通过扩展功能-
private fun Message.toMessagePresentation(): MessagePresentation {
    return MessagePresentation(code, message)`
}
  1. 通过实例方法-
data class Message(
   val code: Int,
   val message: String?
) {
   fun toMessagePresentation(): MessagePresentation {
       return MessagePresentation(code, message)
  }
}
  1. 通过构造函数-
@Parcelize
data class MessagePresentation(
   val code: Int,
   val message: String?
) : Parcelable {
    constructor(message: Message) : this(message.code, message.message)
}

输出-

val message = Message(0, "hello")
val messageRepresentation1 = message.toMessagePresentation()
val messageRepresentation2 = message.toMessagePresentation()
val messageRepresentation3 = MessagePresentation(message)