Sobes.tech
Junior — Middle

V akom poradí sa inicializujú vlastnosti a vykonávajú bloky kódu pri vytváraní objektu, vrátane companion object, init bloku, premenných v konštruktore a bežných premenných?

sobes.tech AI

Odpoveď od AI

Pri vytváraní objektu v Kotlin je poradové poradie inicializácie nasledovné:

  1. Inicializácia companion object — prebieha raz pri načítaní triedy, pred vytvorením inštancií.
  2. Inicializácia vlastností deklarovaných v tele triedy (vrátane tých deklarovaných mimo konštruktora) — sú inicializované v poradí, v akom sú deklarované.
  3. Vykonanie init blokov — sú vykonané v poradí, v akom sú deklarované v triede, ihneď po inicializácii vlastností.
  4. Inicializácia vlastností deklarovaných v konštruktore (napríklad parametre s val/var) — sú inicializované pri volaní konštruktora.

Príklad:

class Example(val constructorProp: String) {
    val property1 = println("property1 inicializovaná")

    init {
        println("init blok 1")
    }

    val property2 = println("property2 inicializovaná")

    init {
        println("init blok 2")
    }

    companion object {
        init {
            println("companion object inicializovaný")
        }
    }
}

fun main() {
    val example = Example("konštruktor")
}

Výstup bude približne:

companion object inicializovaný
property1 inicializovaná
init blok 1
property2 inicializovaná
init blok 2

Takto je companion object inicializovaný raz pri načítaní triedy, potom pri vytváraní objektu sú inicializované vlastnosti a vykonané init bloky v poradí deklarácie, a parametre konštruktora sú inicializované pri volaní konštruktora.