Middle
Kokios yra savybės dirbant su konstruktoriais ir objektų inicijavimu Kotlin?
sobes.tech AI
Atsakymas iš AI
Kotlin klasės gali turėti pagrindinį konstruktorių ir vieną ar kelis antrinius konstruktorius.
Pagrindinis konstruktorius:
- Deklaruojamas klasės antraštėje:
class User(val vardas: String, var amžius: Int = 0) { // klasės turinys } - Neturi kūno. Inicijavimo kodas vykdomas
initblokuose. - Savybės, deklaruotos pagrindiniame konstruktoriuje su
valarbavar, tampa klasės savybėmis. - Konstrukcijos parametrus galima naudoti
initblokuose ir savybių inicijavime:init { println("Naudotojo inicializacija $vardas") } val aprašymas = "Naudotojas: $vardas, amžius: $amžius" - Jei pagrindinis konstruktorius neturi anotacijų ar matomumo modifikatorių, žodį
constructorgalima praleisti.
init blokai:
- Turi inicializacijos kodą, kuris vykdomas kuriant klasės egzempliorių.
- Vykdomi jų deklaravimo tvarka.
- Vykdomi po pagrindinio konstruktoriaus iškvietimo (jei yra), bet prieš antruosius konstruktorius.
Antriniai konstruktoriai:
- Deklaruojami su žodžiu
constructor. - Gali deleguoti iškvietimą kitam savo klasės konstruktoriui naudojant
this()arba bazinio konstruktoriaus naudojantsuper(). Delegacija turi būti pirmoji instrukcija.class User(val vardas: String) { constructor(vardas: String, amžius: Int) : this(vardas) { println("Antrinis konstruktorius") // papildoma inicializacijos logika } } - Jei klasė turi pagrindinį konstruktorių, visi antriniai turi aiškiai arba netiesiogiai deleguoti jam per
this().
Inicijavimo tvarka:
- Pagrindinio konstruktoriaus kodo vykdymas (jei yra).
initblokų vykdymas jų deklaravimo tvarka.- Antrinio konstruktoriaus kodo vykdymas (jei naudojamas).
Pavyzdys:
class Example(vardas: String) {
init {
println("Pirmas init blokas $vardas")
}
val savybė1 = "Savybė 1"
init {
println("Antras init blokas $vardas")
}
constructor(vardas: String, amžius: Int) : this(vardas) {
println("Antrinis konstruktorius $vardas, amžius $amžius")
}
}
fun main() {
val ex1 = Example("Naudotojas1") // Išves: Pirmas init blokas Naudotojas1, Antras init blokas Naudotojas1
val ex2 = Example("Naudotojas2", 30) // Išves: Pirmas init blokas Naudotojas2, Antras init blokas Naudotojas2, Antrinis konstruktorius Naudotojas2, amžius 30
}
Pagrindinės savybės: deklaratyvus pagrindinio konstruktoriaus sintaksė, init blokų naudojimas inicializacijos logikai, aiški delegacija antruosiuose konstruktoriuose, siekiant užtikrinti nuoseklų objektų kūrimą.