Beszélj az inicializálókról Kotlin nyelvű osztályokban.
sobes.tech MI
Válasz az MI-től
Kotlinban az osztályoknak lehet elsődleges és egy vagy több másodlagos konstruktoruk. Az inicializálók init blokk kódok, amelyek a deklarációjuk után, sorrendben futnak le, az elsődleges konstruktor (ha van) vagy a másodlagos konstruktor futása után, ha elsődleges nincs.
Elsődleges konstruktor
Közvetlenül az osztály fejlécében van deklarálva. Tartalmazhat paramétereket, amelyeket az attribútumok inicializálására használnak.
class User(name: String, age: Int) {
init {
// Ez a blokk az osztály példányának létrehozásakor fut
println("Felhasználó létrehozva: $name, $age")
}
}
Másodlagos konstruktorok
A constructor kulcsszóval vannak deklarálva, és mindig delegálniuk kell egy másik konstruktor hívására ugyanabban az osztályban, akár az elsődlegesre (this), akár egy másik másodlagosra.
class User {
init {
// Ez a blokk elsőként fut, ha van elsődleges konstruktor
}
constructor(name: String) : this() {
// Másodlagos konstruktor 1
println("Felhasználó létrehozva névvel: $name")
}
constructor(name: String, age: Int) : this(name) {
// Másodlagos konstruktor 2, meghívja az első másodlagost
println("Felhasználó létrehozva névvel és életkornál: $name, $age")
}
}
Végrehajtási sorrend
- A kód az elsődleges konstruktorban (ha vannak paraméterek, azok használódnak).
- Az
initblokkok sorrendben. - A hívott másodlagos konstruktor kódja (delegálás után).
Példa végrehajtási sorrendre:
class Example {
init {
println("Init blokk 1")
}
constructor(i: Int) {
println("Másodlagos konstruktor $i")
}
init {
println("Init blokk 2")
}
}
fun main() {
Example(10)
}
Kimenet:
Init blokk 1
Init blokk 2
Másodlagos konstruktor 10
Még akkor is, ha másodlagos konstruktor hívódik meg, az init blokkok mindig azelőtt futnak, hogy a másodlagos konstruktor törzse végrehajtódna. Ez garantálja, hogy az objektum fő inicializálása befejeződött, mielőtt a másodlagos konstruktor specifikus kódja futna.
Az inicializálók elengedhetetlenek a logika végrehajtásához, amelyet minden példány létrehozásakor végre kell hajtani, függetlenül attól, hogy melyik konstruktor van használatban. Például bemeneti adatok ellenőrzésére vagy az objektum állapotának beállítására.