Junior — Middle
Kokiu tvarką vyksta savybių inicializavimas ir kodo blokų vykdymas kuriant objektą, įskaitant companion object, init bloką, konstruktoriaus kintamuosius ir įprastus kintamuosius?
sobes.tech AI
Atsakymas iš AI
Kuriant objektą Kotlin, inicializacijos tvarka yra tokia:
- companion object inicijavimas — vyksta vieną kartą įkeliant klasę, prieš kuriant egzempliorius.
- Klasės kūne deklaruotų savybių inicijavimas (įskaitant tas, kurios deklaruotos už konstruktoriaus ribų) — jos inicijuojamos deklaracijos tvarka.
- init blokų vykdymas — jie vykdomi deklaracijos tvarka, iškart po savybių inicijavimo.
- Konstruktoriuje deklaruotų savybių (pvz., val/var parametrų) inicijavimas — jie inicijuojami kartu su konstrukcijos iškvietimu.
Pavyzdys:
class Example(val constructorProp: String) {
val property1 = println("property1 inicijuota")
init {
println("init blokas 1")
}
val property2 = println("property2 inicijuota")
init {
println("init blokas 2")
}
companion object {
init {
println("companion object inicijuotas")
}
}
}
fun main() {
val example = Example("konstruktorius")
}
Išvestis bus maždaug tokia:
companion object inicijuotas
property1 inicijuota
init blokas 1
property2 inicijuota
init blokas 2
Šiuo būdu, companion object inicijuojamas vieną kartą įkeliant klasę, tada, kuriant objektą, inicijuojamos savybės ir vykdomi init blokai deklaracijos tvarka, o konstruktoriaus parametrai inicijuojami iškvietimo metu.