Испричајте о иницијализаторима у класама у Kotlin-у.
sobes.tech АИ
Одговор од АИ
U Kotlinu, klase mogu imati primarni i jedan ili više sekundarnih konstruktora. Inicijalizatori su blokovi koda init koji se izvršavaju redom nakon njihove deklaracije, bilo nakon primarnog konstruktora (ako postoji) ili nakon sekundarnog, ako primarni ne postoji.
Primarni konstruktor
Direktno se deklarise u zaglavlju klase. Može sadržavati parametre koji se koriste za inicijalizaciju svojstava.
class User(name: String, age: Int) {
init {
// Ovaj blok se izvršava pri kreiranju instance klase
println("Korisnik kreiran: $name, $age")
}
}
Sekundarni konstruktori
Se deklarisu ključnom riječi constructor i uvijek moraju delegirati poziv na drugi konstruktor iste klase, bilo na primarni (preko this) ili na drugi sekundarni.
class User {
init {
// Ovaj blok se izvršava prvi, ako postoji primarni konstruktor
}
constructor(name: String) : this() {
// Sekundarni konstruktor 1
println("Korisnik kreiran sa imenom: $name")
}
constructor(name: String, age: Int) : this(name) {
// Sekundarni konstruktor 2, poziva prvi sekundarni
println("Korisnik kreiran sa imenom i godinama: $name, $age")
}
}
Redosled izvršavanja
- Kod u primarnom konstruktoru (ako postoji, koriste se parametri).
- Blokovi
initredom. - Kod u pozvanom sekundarnom konstruktoru (nakon delegacije).
Primer redosleda izvršavanja:
class Example {
init {
println("Init blok 1")
}
constructor(i: Int) {
println("Sekundarni konstruktor $i")
}
init {
println("Init blok 2")
}
}
fun main() {
Example(10)
}
Izlaz:
Init blok 1
Init blok 2
Sekundarni konstruktor 10
Čak i ako se pozove sekundarni konstruktor, init blokovi se uvijek izvršavaju prije njegovog tijela. To osigurava da je osnovna inicijalizacija objekta završena prije izvršenja specifičnog koda sekundarnog konstruktora.
Inicijalizatori su neophodni za izvršavanje logike koja mora biti izvršena pri kreiranju bilo kojeg primjerka klase, bez obzira na korišteni konstruktor. Na primjer, za provjeru ulaznih podataka ili za konfiguraciju stanja objekta.