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-у, редослед иницијализације је следећи:
- Иницијализација companion object-а — дешава се једном при учитавању класе, пре креирања инстанци.
- Иницијализација својстава декларативних у телу класе (укључујући она која су декларативана изван конструктора) — она се извршава у редоследу у коме су декларативана.
- Извршавање init блокова — они се извршавају у редоследу у коме су декларативани у класи, одмах након иницијализације својстава.
- Иницијализација својстава декларативних у конструктора (нпр. параметри са 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 блокови у редоследу декларације, а параметри конструктора се иницијализују при позиву конструктора.