Middle
Kādas ir iezīmes darbā ar konstruktoriem un objektu inicializāciju Kotlin?
sobes.tech AI
Atbilde no AI
Kotlin klases var būt galvenais konstruktoru un vienu vai vairākiem sekundārajiem konstruktoriem.
Galvenais konstruktoru:
- Deklarēts klases virsmas:
class User(val vārds: String, var vecums: Int = 0) { // klases ķermenis } - Tam nav ķerme. Inicializācijas kods tiek izpildīts
initblokos. - Īpašības, kas deklarētas galvenajā konstruktorā ar
valvaivar, kļūst par klases īpašībām. - Konstrukcijas parametri var tikt izmantoti
initblokos un īpašību inicializācijā:init { println("Lietotāja inicializācija $vārds") } val apraksts = "Lietotājs: $vārds, vecums: $vecums" - Ja galvenais konstruktoru nav anotāciju vai redzamības modifikatoru, vārdu
constructorvar izlaist.
init blokos:
- Satur inicializācijas kodu, kas tiek izpildīts, izveidojot klases eksemplāru.
- Tiek izpildīti to deklarēšanas secībā.
- Tiek izpildīti pēc galvenā konstruktoru izsaukšanas (ja ir), bet pirms sekundārajiem konstruktoriem.
Sekundārie konstruktoru:
- Deklarēti ar vārdu
constructor. - Var deleģēt izsaukumu citam sava klases konstruktoram ar
this()vai bāzes klases konstruktoru arsuper(). Deleģācija jābūt pirmajai instrukcijai.class User(val vārds: String) { constructor(vārds: String, vecums: Int) : this(vārds) { println("Sekundārais konstruktor") // Papildu inicializācijas loģika } } - Ja klasei ir galvenais konstruktoru, visi sekundārie jādeleģē tam tieši vai netieši ar
this().
Iniciācijas secība:
- Galvenā konstruktoru koda izpilde (ja ir).
initblokos izpilde to deklarēšanas secībā.- Sekundārā konstruktoru koda izpilde (ja tiek izmantots).
Piemērs:
class Example(vārds: String) {
init {
println("Pirmais init bloks $vārds")
}
val īpašība1 = "Īpašība 1"
init {
println("Otrais init bloks $vārds")
}
constructor(vārds: String, vecums: Int) : this(vārds) {
println("Sekundārais konstruktor $vārds, vecums $vecums")
}
}
fun main() {
val ex1 = Example("Lietotājs1") // Izvadīs: Pirmais init bloks Lietotājs1, Otrais init bloks Lietotājs1
val ex2 = Example("Lietotājs2", 30) // Izvadīs: Pirmais init bloks Lietotājs2, Otrais init bloks Lietotājs2, Sekundārais konstruktor Lietotājs2, vecums 30
}
Galvenās īpašības: deklaratīva galvenā konstruktoru sintakse, init bloku izmantošana inicializācijas loģikai, skaidra deleģācija sekundārajos konstruktoros, nodrošinot objekta veidošanas secību.