Выбор ответа Middle Классы, data и sealed обновлено
Свойство в теле data class и equals
Вопрос
Что выведет код?
data class Item(val id: Int) {
var cached: String = ""
}
val a = Item(1).apply { cached = "x" }
val b = Item(1).apply { cached = "y" }
println(a == b)
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: true. equals у data class учитывает только свойства первичного конструктора, здесь это id.
Варианты ответа
trueправильный ответfalse- Ошибка компиляции: в data class нельзя объявлять свойства в теле
- Зависит от порядка создания объектов
Разбор
equals у data class учитывает только свойства первичного конструктора, здесь это id. Поле cached объявлено в теле и в сравнении не участвует, поэтому объекты равны. Объявлять свойства в теле можно. Иногда это используют специально, чтобы исключить поле из equals, но чаще это сюрприз на ревью.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.