Sobes.tech
Junior — Middle

Koje redoslijed inicijalizacije svojstava i izvršavanja blokova koda prilikom kreiranja objekta, uključujući companion object, init blok, promenljive u konstruktoru i obične promenljive?

sobes.tech АИ

Одговор од АИ

Када креирате објекат у Kotlin-у, редослед иницијализације је следећи:

  1. Иницијализација companion object-а — дешава се једном при учитавању класе, пре креирања инстанци.
  2. Иницијализација својстава декларативних у телу класе (укључујући она која су декларативана изван конструктора) — она се извршава у редоследу у коме су декларативана.
  3. Извршавање init блокова — они се извршавају у редоследу у коме су декларативани у класи, одмах након иницијализације својстава.
  4. Иницијализација својстава декларативних у конструктора (нпр. параметри са val/var) — она се извршава при позиву конструктора.

Пример:

class Example(val constructorProp: String) {
    val property1 = println("property1 иницијализован")

    init {
        println("init блок 1")
    }

    val property2 = println("property2 иницијализован")

    init {
        println("init блок 2")
    }

    companion object {
        init {
            println("companion object иницијализован")
        }
    }
}

fun main() {
    val example = Example("конструктор")
}

Излаз ће бити приближно:

companion object иницијализован
property1 иницијализован
init блок 1
property2 иницијализован
init блок 2

На овај начин, companion object се иницијализује једном при учитавању класе, затим, при креирању објекта, иницијализују се својства и извршавају init блокови у редоследу декларације, а параметри конструктора се иницијализују при позиву конструктора.