Povězte mi o inicializátorech ve třídách v Kotlinu.
sobes.tech AI
Odpověď od AI
V Kotlinu mohou třídy mít primární a jeden nebo více sekundárních konstruktorů. Inicializátory jsou bloky kódu init, které se vykonávají v pořadí po jejich deklaraci, buď po primárním konstruktoru (pokud existuje), nebo po sekundárním konstruktoru, pokud primární neexistuje.
Primární konstruktor
Je deklarován přímo v hlavičce třídy. Může obsahovat parametry, které se používají k inicializaci vlastností.
class User(name: String, age: Int) {
init {
// Tento blok se vykoná při vytváření instance třídy
println("Uživatel vytvořen: $name, $age")
}
}
Sekundární konstruktor
Je deklarován klíčovým slovem constructor a musí vždy delegovat volání na jiný konstruktor téže třídy, buď na primární (přes this), nebo na jiný sekundární.
class User {
init {
// Tento blok se vykoná jako první, pokud existuje primární konstruktor
}
constructor(name: String) : this() {
// Sekundární konstruktor 1
println("Uživatel vytvořen s názvem: $name")
}
constructor(name: String, age: Int) : this(name) {
// Sekundární konstruktor 2, volá první sekundární
println("Uživatel vytvořen s názvem a věkem: $name, $age")
}
}
Pořadí vykonávání
- Kód v primárním konstruktoru (pokud má parametry, jsou použity).
- Bloky
initpostupně. - Kód v volaném sekundárním konstruktoru (po delegaci).
Příklad pořadí vykonávání:
class Example {
init {
println("Init blok 1")
}
constructor(i: Int) {
println("Sekundární konstruktor $i")
}
init {
println("Init blok 2")
}
}
fun main() {
Example(10)
}
Výstup:
Init blok 1
Init blok 2
Sekundární konstruktor 10
I když je volán sekundární konstruktor, bloky init se vždy vykonají před jeho tělem. To zajišťuje, že hlavní inicializace objektu je dokončena před provedením specifického kódu sekundárního konstruktoru.
Inicializátory jsou nezbytné pro provádění logiky, která musí být provedena při vytváření jakéhokoliv instance třídy, bez ohledu na použitý konstruktor. Například pro kontrolu vstupních dat nebo nastavení stavu objektu.