Копирование data class в Kotlin
Присваивание объекта другой переменной копирует
ссылку, а не отдельный экземпляр - исходный и новый
указатель делят одни и те же поля. Метод copy
у data class создаёт новый объект с теми же
полями, что и исходный. В вызове можно указать только
те параметры, которые нужно заменить - остальные
возьмутся из текущего значения:
data class User(val name: String, val age: Int)
fun main() {
val ann = User("Ann", 25)
val older = ann.copy(age = 26)
println(older)
}
Исходный объект не меняется: copy возвращает
отдельный экземпляр. Так удобно обновлять записи
с val-полями, не нарушая неизменяемость:
data class Settings(val theme: String, val lang: String)
fun main() {
val base = Settings("light", "en")
val dark = base.copy(theme = "dark")
println(base.theme)
println(dark.theme)
}
Имена аргументов в copy совпадают с именами
свойств. Можно передать несколько полей сразу,
если нужно изменить больше одного значения:
data class Job(val role: String, val level: Int)
fun main() {
val j = Job("dev", 1)
val promoted = j.copy(role = "lead", level = 2)
println(promoted)
}
Сделайте data class Price с полями
label и amount.
Дан объект:
val old = Price("basic", 10)
Получите копию объекта с тем же label
и amount = 15. Выведите на экран оба
объекта в двух строках.
Сделайте data class Route с полями
from, to, stops.
Создайте маршрут "A" - "B"
с 0 остановками. Получите копию
маршрута с stops = 2 и выведите на
экран только новый объект.