Sobes.tech
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ť.