Sobes.tech
Junior — Middle

Explica el principio de funcionamiento del método copy en una data class, teniendo en cuenta la presencia de campos dentro de la clase

sobes.tech AI

Respuesta de la IA

Метод copy у Kotlin data class создаёт новый объект, копируя все поля исходного объекта, но при этом позволяет изменить значения некоторых полей при копировании. Это удобно для создания похожих объектов с небольшими отличиями без необходимости вручную копировать все свойства.

Если в классе есть поля, то при вызове copy они копируются по значению. Для примитивных и неизменяемых типов это просто копирование значений. Если поле — это изменяемый объект (например, список), то копируется ссылка на этот объект, а не создаётся глубокая копия. Поэтому при работе с изменяемыми полями нужно быть осторожным, чтобы не получить нежелательное разделение состояния.

Пример:

data class User(val name: String, val age: Int, val tags: MutableList<String>)

val user1 = User("Alice", 30, mutableListOf("admin"))
val user2 = user1.copy(age = 31)

user2.tags.add("editor")
println(user1.tags) // Выведет ["admin", "editor"], т.к. список общий

Таким образом, copy создаёт поверхностную копию объекта, а не глубокую. Если нужны глубокие копии, их нужно реализовать самостоятельно.