Middle
Aké sú vlastnosti práce s konštruktormi a inicializáciou objektov v Kotlin?
sobes.tech AI
Odpoveď od AI
V Kotlinu môžu mať triedy primárny konštruktor a jeden alebo viac sekundárnych konštruktorov.
Primárny konštruktor:
- Je deklarovaný v hlavičke triedy:
class User(val meno: String, var vek: Int = 0) { // telo triedy } - Nemá telo. Inicializačný kód sa vykonáva v blokoch
init. - Vlastnosti deklarované v primárnom konštruktoru s
valalebovarsa stávajú vlastnosťami triedy. - Parametre konštruktora je možné používať v blokoch
inita pri inicializácii vlastností:init { println("Inicializácia používateľa $meno") } val popis = "Používateľ: $meno, vek: $vek" - Ak primárny konštruktor nemá anotácie alebo modifikátory viditeľnosti, kľúčové slovo
constructormožno vynechať.
Bloky init:
- Obsahujú inicializačný kód, ktorý sa vykonáva pri vytváraní inštancie triedy.
- Probíhajú v poradí, v akom sú deklarované.
- Spúšťajú sa po volaní primárneho konštruktora (ak je), ale pred sekundárnymi konštruktormi.
Sekundárne konštruktory:
- Sú deklarované kľúčovým slovom
constructor. - Môžu delegovať volanie na iný konštruktor svojej triedy pomocou
this()alebo na konštruktor základnej triedy pomocousuper(). Delegácia musí byť prvou inštrukciou.class User(val meno: String) { constructor(meno: String, vek: Int) : this(meno) { println("Sekundárny konštruktor") // Ďalšia inicializačná logika } } - Ak má trieda primárny konštruktor, všetky sekundárne musia explicitne alebo implicitne delegovať naň cez
this().
Poradie inicializácie:
- Spustenie kódu v primárnom konštruktore (ak je).
- Spustenie blokov
initv poradí ich deklarácie. - Spustenie kódu sekundárneho konštruktora (ak sa používa).
Príklad:
class Example(meno: String) {
init {
println("Prvý blok init pre $meno")
}
val vlastnosť1 = "Vlastnosť 1"
init {
println("Druhý blok init pre $meno")
}
constructor(meno: String, vek: Int) : this(meno) {
println("Sekundárny konštruktor pre $meno, vek $vek")
}
}
fun main() {
val ex1 = Example("Používateľ1") // Vypíše: Prvý blok init pre Používateľ1, Druhý blok init pre Používateľ1
val ex2 = Example("Používateľ2", 30) // Vypíše: Prvý blok init pre Používateľ2, Druhý blok init pre Používateľ2, Sekundárny konštruktor pre Používateľ2, vek 30
}
Kľúčové vlastnosti: deklaratívny syntax primárneho konštruktora, použitie blokov init pre logiku inicializácie, explicitná delegácia v prípade sekundárnych konštruktorov na zabezpečenie konzistencie vytvárania objektov.