#android #kotlin
#Android #kotlin
Вопрос:
Привет, у меня есть обычный класс данных
data class Message(
val code: Int,
val message: String?
)
и его версия @Parcelize
@Parcelize
data class MessagePresentation(
val code: Int,
val message: String?
): Parcelable
Теперь, как написать конвертер, чтобы я мог сопоставить класс 1 с 1?
Комментарии:
1. Учитывая, что 2 класса идентичны, вам вообще нужны оба?
Ответ №1:
Вы можете добиться этого несколькими способами:
- с помощью функций расширения —
private fun Message.toMessagePresentation(): MessagePresentation {
return MessagePresentation(code, message)`
}
- с помощью метода экземпляра —
data class Message(
val code: Int,
val message: String?
) {
fun toMessagePresentation(): MessagePresentation {
return MessagePresentation(code, message)
}
}
- через конструктор —
@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)
Ответ №2:
Вам не нужно создавать какую-то специальную логику для преобразования. Единственное, что вам нужно сделать, это создать свой MessagePresentation
объект с полями вашего Message
объекта.
...
val message = Message(code, message)
val messagePresentation = MessagePresentation(message.code, message.message)
...
Например, вы можете указать дополнительный конструктор в MessagePresentation
классе с Message
аргументом.
Также вы можете создать функцию расширения, подобную этой
fun Message.toPresentation(): MessagePresentation =
MessagePresentation(
code = code
message = message
)