Middle
Hoe gebruik je sealed classes om hiërarchieën te modelleren in Kotlin?
sobes.tech AI
Antwoord van AI
Gesloten klassen (sealed classes) worden gebruikt om beperkte erfhiërarchieën weer te geven, waarbij alle mogelijke subklassen bekend zijn op het moment van compilatie.
Belangrijkste kenmerken:
- Alle directe subklassen moeten in hetzelfde bestand als de gesloten klasse staan (voor Kotlin 1.5). Vanaf Kotlin 1.5 kunnen ze in elk bestand van dezelfde compilatie staan.
- Subklassen van een gesloten klasse kunnen gewone klassen, data-classes, object-declaraties of andere gesloten klassen zijn.
- De constructor van de gesloten klasse is standaard privé; andere modificatoren (public, protected, internal) zijn niet toegestaan.
- Ze maken het gebruik van een volledige (
exhaustive) analyse in when-uitdrukkingen mogelijk, wat garandeert dat alle mogelijke opties worden afgehandeld en de noodzaak van een else-branch wegneemt.
Voorbeeld van gebruik om de toestand van een gebruikersinterface te modelleren:
sealed class UiState {
object Loading : UiState() // Laadstatus
data class Success(val data: String) : UiState() // Succesvolle gegevensophaal
data class Error(val message: String) : UiState() // Fout
}
Gebruik in een when-uitdrukking:
fun handleUiState(state: UiState): String {
return when (state) {
UiState.Loading -> "Gegevens worden geladen..."
is UiState.Success -> "Gegevens succesvol geladen: ${state.data}"
is UiState.Error -> "Fout: ${state.message}"
}
}
Voordelen:
- Typeveiligheid: de compiler controleert of alle mogelijke subklassen worden afgehandeld.
- Leesbaarheid: toont duidelijk welke varianten van gegevens of toestanden kunnen bestaan.
- Gemak: vereenvoudigt het werken met
when-uitdrukkingen.