Sobes.tech
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 и други методи.

По този начин, обявяването в главния конструктор прави полето част от "данните" на класа, а обявяването вътре в тялото — просто допълнително свойство.