Vertel over initializers in klassen in Kotlin.
sobes.tech AI
Antwoord van AI
In Kotlin kunnen klassen een primaire en één of meerdere secundaire constructors hebben. Initialisatoren zijn codeblokken init die in volgorde worden uitgevoerd na hun declaratie, hetzij na de primaire constructor (indien aanwezig) of na de secundaire constructor, indien geen primaire aanwezig is.
Primaire constructor
Wordt direct gedeclareerd in de klasse header. Kan parameters bevatten die worden gebruikt om eigenschappen te initialiseren.
class User(name: String, age: Int) {
init {
// Dit blok wordt uitgevoerd bij het aanmaken van een instantie van de klasse
println("Gebruiker gemaakt: $name, $age")
}
}
Secundaire constructors
Worden gedeclareerd met het sleutelwoord constructor en moeten altijd delegatie aan een andere constructor van dezelfde klasse, hetzij de primaire (via this) of een andere secundaire.
class User {
init {
// Dit blok wordt als eerste uitgevoerd, indien er een primaire constructor is
}
constructor(name: String) : this() {
// Secundaire constructor 1
println("Gebruiker gemaakt met naam: $name")
}
constructor(name: String, age: Int) : this(name) {
// Secundaire constructor 2, roept de eerste secundaire aan
println("Gebruiker gemaakt met naam en leeftijd: $name, $age")
}
}
Uitvoeringsvolgorde
- De code in de primaire constructor (indien parameters aanwezig, worden deze gebruikt).
- De
init-blokken in volgorde. - De code in de aangeroepen secundaire constructor (na delegatie).
Voorbeeld van uitvoeringsvolgorde:
class Example {
init {
println("Init-blok 1")
}
constructor(i: Int) {
println("Secundaire constructor $i")
}
init {
println("Init-blok 2")
}
}
fun main() {
Example(10)
}
Uitvoer:
Init-blok 1
Init-blok 2
Secundaire constructor 10
Zelfs als een secundaire constructor wordt aangeroepen, worden de init-blokken altijd vóór de body ervan uitgevoerd. Dit garandeert dat de hoofdinitialisatie van het object voltooid is voordat de specifieke code van de secundaire constructor wordt uitgevoerd.
Initialisatoren zijn onmisbaar voor het uitvoeren van logica die moet worden uitgevoerd bij het maken van elk exemplaar van de klasse, ongeacht welke constructor wordt gebruikt. Bijvoorbeeld, voor het controleren van invoergegevens of het instellen van de toestand van het object.