Pastāstiet par inicializatoriem Kotlin klasēs.
sobes.tech AI
Atbilde no AI
Kotlin klases var būt galvenais un vienu vai vairākiem sekundārajiem konstruktoriem. Inicializatori ir init bloki, kas tiek izpildīti pēc to paziņošanas secības, pēc galvenā konstruktoru (ja tas ir) vai pēc sekundārā konstruktoru, ja galvenais nav.
Galvenais konstruktoru
Tiek paziņots tieši klases virsrakstā. Tas var saturēt parametrus, kas tiek izmantoti īpašību inicializācijai.
class User(name: String, age: Int) {
init {
// Šis bloks tiek izpildīts, izveidojot klases instanci
println("User created: $name, $age")
}
}
Sekundārie konstruktoru
Tiek paziņoti ar constructor atslēgvārdu un vienmēr ir jādeleģē citam tajā pašā klasē esošam konstruktoram, vai nu galvenajam (caur this), vai citam sekundāram.
class User {
init {
// Šis bloks tiek izpildīts pirmais, ja ir galvenais konstruktoru
}
constructor(name: String) : this() {
// Sekundārais konstruktor 1
println("User created with name: $name")
}
constructor(name: String, age: Int) : this(name) {
// Sekundārais konstruktor 2, izsauc pirmo sekundāro
println("User created with name and age: $name, $age")
}
}
Izpildes secība
- Kods galvenajā konstruktorā (ja ir parametri, tie tiek izmantoti)
initbloki secīgi- Kods tajā sekundārajā konstruktorā, kas tika izsaukts (pēc deleģēšanas izsaukuma)
Piemērs izpildes secībai:
class Example {
init {
println("Init block 1")
}
constructor(i: Int) {
println("Secondary constructor $i")
}
init {
println("Init block 2")
}
}
fun main() {
Example(10)
}
Izvade:
Init block 1
Init block 2
Secondary constructor 10
Pat ja tiek izsaukts sekundārais konstruktor, init bloki vienmēr tiek izpildīti pirms tā ķermeņa. Tas nodrošina, ka galvenā objekta inicializācija ir pabeigta pirms specifiskā koda izpildes sekundārajā konstruktorā.
Iniciatori ir neaizvietojami, lai izpildītu loģiku, kas jāveic, izveidojot jebkuru klases instanci, neatkarīgi no tā, kurš konstruktor tiek izmantots. Piemēram, ievades datu pārbaude vai stāvokļa iestatīšana objekta.