Junior — Middle
Kādas ir atšķirības starp lauku deklarēšanu konstruktorā un galvenajā datu klases ķermenī?
sobes.tech AI
Atbilde no AI
Kotlinā lauki, kas deklarēti galvenajā konstruktorā (iekavās pēc klases nosaukuma), automātiski kļūst par klases īpašībām ar atbilstošajām equals(), hashCode(), toString() metodēm, kā arī piedalās destrukturizācijā.
Piemērs:
data class User(val name: String, val age: Int)
Šeit name un age ir klases īpašības.
Ja, gluži pretēji, lauks tiek deklarēts klases ķermenī (piemēram, konstruktorā vai kā parasta īpašība), tas nepiedalīsies automātiski ģenerētajās data class metodēs un nebūs daļa no destrukturizācijas:
data class User(val name: String) {
var age: Int = 0
}
Šeit age ir parasta īpašība, kas netiek ņemta vērā equals un citās metodēs.
Tādējādi, deklarējot galvenajā konstruktorā, lauks kļūst par daļu no "datiem" klases, bet deklarējot ķermenī — tikai kā papildu īpašība.