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.