Junior — Middle
Каква е разликата между обявяването на полета вътре в конструктора и в основното тяло на data class?
sobes.tech AI
Отговор от AI
В Kotlin полетата, обявени в главния конструктор (в скоби след името на класа), автоматично стават свойства на класа с съответните методи 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 и други методи.
По този начин, обявяването в главния конструктор прави полето част от "данните" на класа, а обявяването вътре в тялото — просто допълнително свойство.