Sobes.tech
Назад к вопросам
Junior — Middle
69

Чем отличается объявление полей внутри конструктора и в основном теле data class?

Компании, где спрашивали
ЯндексЯндекс

Ответ от нейросети

sobes.tech AI

В Kotlin data class поля, объявленные в основном конструкторе (в скобках после имени класса), автоматически становятся свойствами класса с соответствующими методами equals(), hashCode(), toString(), а также участвуют в деструктуризации.

Пример:

data class User(val name: String, val age: Int)

Здесь name и age — свойства класса.

Если же объявить поле внутри тела класса (например, внутри конструктора или как обычное свойство), оно не будет участвовать в автоматически сгенерированных методах data class и не будет частью деструктуризации:

data class User(val name: String) {
    var age: Int = 0
}

Здесь age — обычное свойство, не учитываемое в equals и других методах.

Таким образом, объявление в основном конструкторе делает поле частью "данных" класса, а объявление внутри тела — просто дополнительным свойством.