Middle
Millised on Kotlinis konstruktoritega ja objektide initsialiseerimisega töötamise omadused?
sobes.tech AI
Vastus AI-lt
Kotlin klassid võivad omada põhikonstructorit ja üht või mitut sekundaarset konstruktorit.
Põhikonstruktor:
- Deklareerub klassi päises:
class User(val nimi: String, var vanus: Int = 0) { // klassi keha } - Ei oma keha. Initsialiseerimiskood täidetakse
initplokkides. - Omadused, mis on deklareeritud põhikonstructoriga
valvõivar, muutuvad klassi omadusteks. - Konstruktoriparameetreid saab kasutada
initplokkides ja omaduste initsialiseerimisel:init { println("Kasutaja initsialiseerimine $nimi") } val kirjeldus = "Kasutaja: $nimi, vanus: $vanus" - Kui põhikonstructoril pole annotatsioone või nähtavusmooduleid, võib
constructorsõna jätta vahele.
init plokid:
- Sisaldavad initsialiseerimiskoodi, mis täidetakse klassi eksemplari loomisel.
- Täidetakse nende deklareerimise järjekorras.
- Täidetakse pärast põhikonstructori väljakutset (kui see on), kuid enne sekundaarseid konstruktorid.
Sekundaarne konstruktor:
- Deklareerub sõnaga
constructor. - Võib delegeerida teise klassi konstruktorile
this()või baasklassilesuper(). Delegeerimine peab olema esimene käsk.class User(val nimi: String) { constructor(nimi: String, vanus: Int) : this(nimi) { println("Sekundaarne konstruktor") // Täiendav initsialiseerimine } } - Kui klassil on põhikonstructor, peavad kõik sekundaarid otseselt või kaudselt sellele delegeerima
this()kaudu.
Initsialiseerimise järjekord:
- Põhikonstruktoril kood täidetakse (kui see on).
initplokid täidetakse nende deklareerimise järjekorras.- Sekundaarne konstruktor täidetakse (kui kasutatakse).
Näide:
class Example(nimi: String) {
init {
println("Esimene init plokk $nimi")
}
val omadus1 = "Omadus 1"
init {
println("Teine init plokk $nimi")
}
constructor(nimi: String, vanus: Int) : this(nimi) {
println("Sekundaarne konstruktor $nimi, vanus $vanus")
}
}
fun main() {
val ex1 = Example("Kasutaja1") // Väljund: Esimene init plokk Kasutaja1, Teine init plokk Kasutaja1
val ex2 = Example("Kasutaja2", 30) // Väljund: Esimene init plokk Kasutaja2, Teine init plokk Kasutaja2, Sekundaarne konstruktor Kasutaja2, vanus 30
}
Peamised omadused: deklaratiivne põhikonstructori süntaks, init plokkide kasutamine initsialiseerimisloogika jaoks, selge delegeerimine sekundaarsetes konstruktorites, et tagada objektide loomise järjepidevus.