Sobes.tech
Back to questions
Junior — Middle
73

Объясните принцип работы метода copy у data class, учитывая наличие полей внутри класса

Companies where asked
Газпром МедиаГазпром Медиа

Answer from AI

sobes.tech AI

Метод 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 создаёт поверхностную копию объекта, а не глубокую. Если нужны глубокие копии, их нужно реализовать самостоятельно.