Junior — Middle
Milyen sorrendben történik a tulajdonságok inicializálása és a kódrészek végrehajtása egy objektum létrehozásakor, beleértve a companion objectet, az init blokkot, a konstruktorban lévő változókat és a szokásos változókat?
sobes.tech MI
Válasz az MI-től
Amikor egy objektumot hozunk létre Kotlinban, az inicializálási sorrend a következő:
- A companion object inicializálása — ez egyszer történik a osztály betöltésekor, még az példányok létrehozása előtt.
- Az osztály törzsében deklarált tulajdonságok inicializálása (beleértve a konstruktoron kívül deklarált tulajdonságokat is) — a deklaráció sorrendjében kerülnek inicializálásra.
- Az init blokkok végrehajtása — a deklaráció sorrendjében futnak, közvetlenül a tulajdonságok inicializálása után.
- A konstruktorban deklarált tulajdonságok (pl. val/var paraméterek) inicializálása — a konstruktor hívásakor kerülnek inicializálásra.
Példa:
class Example(val constructorProp: String) {
val property1 = println("property1 inicializálva")
init {
println("init blokk 1")
}
val property2 = println("property2 inicializálva")
init {
println("init blokk 2")
}
companion object {
init {
println("companion object inicializálva")
}
}
}
fun main() {
val example = Example("konstruktor")
}
A kimenet kb. így fog kinézni:
companion object inicializálva
property1 inicializálva
init blokk 1
property2 inicializálva
init blokk 2
Így a companion object egyszer inicializálódik a osztály betöltésekor, majd példány létrehozásakor a tulajdonságok inicializálódnak és az init blokkok a deklaráció sorrendjében futnak, a konstruktor paraméterei pedig a konstruktor hívásakor kerülnek inicializálásra.