Выбор ответа Middle Классы, data и sealed обновлено
Поверхностное копирование в data class copy
Вопрос
Что выведет код?
data class Box(val tags: MutableList<Int>)
val a = Box(mutableListOf(1))
val b = a.copy()
b.tags.add(2)
println(a.tags)
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: [1, 2]. copy создаёт новый объект, но переносит в него ссылки на те же значения, копия поверхностная.
Варианты ответа
[1, 2]правильный ответ[1][]- Ошибка компиляции:
copyнедоступен дляMutableList
Разбор
copy создаёт новый объект, но переносит в него ссылки на те же значения, копия поверхностная. Список у a и b один и тот же, поэтому изменение через b видно через a. Защита: хранить в data class неизменяемые List и создавать новый список при изменении (copy(tags = tags + 2)).
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.