Копирование свойств между объектами в Kotlin: методы и примеры

Чтобы скопировать свойства из одного объекта в другой в Kotlin, вы можете использовать различные методы, такие как присвоение вручную, использование функции copy() (для классов данных) или использование таких библиотек, как Apache Commons BeanUtils или Jackson.

  1. Назначение вручную.
    Один простой способ копирования свойств между объектами — вручную назначить каждое значение свойства из исходного объекта соответствующему свойству в целевом объекте. Вот пример:
class Person {
    var name: String = ""
    var age: Int = 0
}
fun main() {
    val source = Person()
    source.name = "John"
    source.age = 25
    val destination = Person()
    destination.name = source.name
    destination.age = source.age
    println(destination.name)  // Output: John
    println(destination.age)   // Output: 25
}
  1. функция copy() (классы данных).
    Если ваши объекты являются классами данных, Kotlin предоставляет встроенную функцию copy(), которая создает новый объект с теми же значениями свойств, что и исходный объект, что позволяет при необходимости изменять определенные свойства. Вот пример:
data class Person(val name: String, val age: Int)
fun main() {
    val source = Person("John", 25)
    val destination = source.copy()
    println(destination.name)  // Output: John
    println(destination.age)   // Output: 25
}
  1. Apache Commons BeanUtils:
    Библиотека Apache Commons BeanUtils предоставляет служебные методы для копирования свойств между объектами без необходимости назначения вручную. Вы можете добавить библиотеку в свой проект и использовать метод copyProperties(). Вот пример:
import org.apache.commons.beanutils.BeanUtils
class Person {
    var name: String = ""
    var age: Int = 0
}
fun main() {
    val source = Person()
    source.name = "John"
    source.age = 25
    val destination = Person()
    BeanUtils.copyProperties(destination, source)
    println(destination.name)  // Output: John
    println(destination.age)   // Output: 25
}
  1. Jackson ObjectMapper:
    Если вы работаете с объектами JSON, вы можете использовать библиотеку Jackson и ее класс ObjectMapperдля копирования свойств между объектами. Вот пример:
import com.fasterxml.jackson.databind.ObjectMapper
class Person {
    var name: String = ""
    var age: Int = 0
}
fun main() {
    val objectMapper = ObjectMapper()
    val source = Person()
    source.name = "John"
    source.age = 25
    val destination = objectMapper.readValue(objectMapper.writeValueAsString(source), Person::class.java)
    println(destination.name)  // Output: John
    println(destination.age)   // Output: 25
}