Sobes.tech
Junior — Middle

W kolejności następuje inicjalizacja właściwości i wykonywanie bloków kodu podczas tworzenia obiektu, w tym companion object, blok init, zmienne w konstruktorze i zwykłe zmienne?

sobes.tech AI

Odpowiedź od AI

Podczas tworzenia obiektu w Kotlinie, kolejność inicjalizacji jest następująca:

  1. Inicjalizacja obiektu companion — odbywa się raz podczas ładowania klasy, przed tworzeniem instancji.
  2. Inicjalizacja właściwości zadeklarowanych w ciele klasy (w tym właściwości zadeklarowanych poza konstruktorem) — są inicjalizowane w kolejności ich deklaracji.
  3. Wykonanie bloków init — są wykonywane w kolejności, w jakiej są zadeklarowane w klasie, zaraz po inicjalizacji właściwości.
  4. Inicjalizacja właściwości zadeklarowanych w konstruktorze (np. parametry z val/var) — są inicjalizowane podczas wywołania konstruktora.

Przykład:

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

    init {
        println("blok init 1")
    }

    val property2 = println("property2 zainicjalizowany")

    init {
        println("blok init 2")
    }

    companion object {
        init {
            println("companion object zainicjalizowany")
        }
    }
}

fun main() {
    val example = Example("konstruktor")
}

Wyjście będzie mniej więcej:

companion object zainicjalizowany
property1 zainicjalizowany
blok init 1
property2 zainicjalizowany
blok init 2

W ten sposób, obiekt companion jest inicjalizowany raz podczas ładowania klasy, następnie przy tworzeniu obiektu inicjalizowane są właściwości i wykonywane bloki init w kolejności deklaracji, a parametry konstruktora są inicjalizowane podczas wywołania konstruktora.