Sobes.tech
Junior — Middle

Mi a különbség a mezők deklarálása a konstruktoron belül és a data class fő testében?

sobes.tech MI

Válasz az MI-től

Kotlinban a fő konstruktorban (a osztály neve után zárójelben) deklarált mezők automatikusan az osztály tulajdonságaivá válnak a megfelelő equals(), hashCode(), toString() metódusokkal, és részt vesznek a destrukturálásban.

Példa:

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

Itt a name és age az osztály tulajdonságai.

Ha viszont egy mezőt az osztály törzsén belül deklarálsz (például a konstruktorban vagy normál tulajdonságként), az nem vesz részt az automatikusan generált data class metódusokban, és nem része a destrukturálásnak:

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

Itt az age egy normál tulajdonság, amit nem vesz figyelembe az equals és más metódusok.

Így a fő konstruktorban való deklarálás a mezőt a "adatok" részévé teszi, míg a törzsön belüli deklaráció csak egy plusz tulajdonság.