Sobes.tech
Junior — Middle

Čím se liší deklarace polí uvnitř konstruktoru a v hlavním těle datové třídy?

sobes.tech AI

Odpověď od AI

V Kotlinu se pole deklarované v hlavním konstruktoru (v závorkách za názvem třídy) automaticky stanou vlastnostmi třídy s odpovídajícími metodami equals(), hashCode(), toString(), a také se účastní destrukturalizace.

Příklad:

data class User(val name: String, val age: Int)

Zde jsou name a age vlastnosti třídy.

Pokud však deklarujete pole uvnitř těla třídy (například v konstruktoru nebo jako běžnou vlastnost), nebude se účastnit automaticky generovaných metod data class a nebude součástí destrukturalizace:

data class User(val name: String) {
    var age: Int = 0
}

Zde je age běžná vlastnost, která není zohledněna v equals a dalších metodách.

Tímto způsobem deklarace v hlavním konstruktoru činí pole součástí "dat" třídy, zatímco deklarace uvnitř těla je pouze doplňkovou vlastností.