Junior — Middle
Aký je rozdiel medzi deklarovaním polí vo vnútri konštruktora a v hlavnom tele data class?
sobes.tech AI
Odpoveď od AI
V Kotlinu sa polia, deklarované v hlavnom konštruktore (v zátvorkách za názvom triedy), automaticky stávajú vlastnosťami triedy s príslušnými metódami equals(), hashCode(), toString(), a tiež sa zúčastňujú destrukturalizácie.
Príklad:
data class User(val name: String, val age: Int)
Tu sú name a age vlastnosti triedy.
Ak však deklarujete pole v tele triedy (napríklad v konštruktore alebo ako obyčajná vlastnosť), nebude sa zúčastňovať na automaticky generovaných metódach data class a nebude súčasťou destrukturalizácie:
data class User(val name: String) {
var age: Int = 0
}
Tu je age obyčajná vlastnosť, ktorá sa nezohľadňuje v equals a iných metódach.
Týmto spôsobom deklarácia v hlavnom konštruktore robí pole súčasťou "dát" triedy, zatiaľ čo deklarácia v tele je len ďalšia vlastnosť.