Middle
Koje su osobine rada sa konstruktorima i inicijalizacijom objekata u Kotlinu?
sobes.tech АИ
Одговор од АИ
U Kotlinu, klase mogu imati primarni konstruktor i jedan ili više sekundarnih konstruktora.
Primarni konstruktor:
- Deklariše se u zaglavlju klase:
class User(val ime: String, var starost: Int = 0) { // telo klase } - Nema telo. Inicijalni kod se izvršava u blokovima
init. - Svojstva deklarisana u primarnom konstruktoru sa
valilivarpostaju svojstva klase. - Parametri konstruktora mogu se koristiti u blokovima
initi pri inicijalizaciji svojstava:init { println("Inicijalizacija korisnika $ime") } val opis = "Korisnik: $ime, starost: $starost" - Ako primarni konstruktor nema anotacije ili modifikatore vidljivosti, ključna reč
constructormože se izostaviti.
Blokovi init:
- Sadrže inicijalni kod koji se izvršava pri kreiranju instance klase.
- Izvršavaju se redom kojim su deklarisani.
- Pokreću se nakon poziva primarnog konstruktora (ako postoji), ali pre sekundarnih konstruktora.
Sekundarni konstruktori:
- Deklarišu se ključnom rečju
constructor. - Mogu delegirati poziv na drugi konstruktor svoje klase pomoću
this()ili konstruktor osnovne klase pomoćusuper(). Poziv delegacije mora biti prva instrukcija.class User(val ime: String) { constructor(ime: String, starost: Int) : this(ime) { println("Sekundarni konstruktor") // Dodatna logika inicijalizacije } } - Ako klasa ima primarni konstruktor, svi sekundarni moraju eksplicitno ili implicitno da delegiraju njemu putem
this().
Redosled inicijalizacije:
- Izvršavanje koda primarnog konstruktora (ako postoji).
- Izvršavanje blokova
initu redosledu njihovog deklarisanja. - Izvršavanje koda sekundarnog konstruktora (ako se koristi).
Primer:
class Example(ime: String) {
init {
println("Prvi blok init za $ime")
}
val svojstvo1 = "Svojstvo 1"
init {
println("Drugi blok init za $ime")
}
constructor(ime: String, starost: Int) : this(ime) {
println("Sekundarni konstruktor za $ime, starost $starost")
}
}
fun main() {
val ex1 = Example("Korisnik1") // Ispisaće: Prvi blok init za Korisnik1, Drugi blok init za Korisnik1
val ex2 = Example("Korisnik2", 30) // Ispisaće: Prvi blok init za Korisnik2, Drugi blok init za Korisnik2, Sekundarni konstruktor za Korisnik2, starost 30
}
Ključne osobine: deklarativni sintaksis primarnog konstruktora, korišćenje blokova init za inicijalizacionu logiku, eksplicitna delegacija u slučaju sekundarnih konstruktora radi osiguranja konzistentnosti kreiranja objekata.