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:
- Inicjalizacja obiektu companion — odbywa się raz podczas ładowania klasy, przed tworzeniem instancji.
- 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.
- Wykonanie bloków init — są wykonywane w kolejności, w jakiej są zadeklarowane w klasie, zaraz po inicjalizacji właściwości.
- 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.