Middle
Ben je bekend met sealed klassen en wat is hun eigenschap?
sobes.tech AI
Antwoord van AI
Ja, ik ken het.
De eigenschap van sealed klassen is dat ze de erfhiërarchie kunnen beperken. Alle directe subtypes van een sealed klasse moeten in hetzelfde bestand worden gedeclareerd. Dit zorgt ervoor dat de compiler alle mogelijke subtypes kent, wat handig is voor het controleren van volledigheid in when uitdrukkingen.
Voorbeeld:
sealed class Result {
data class Success(val message: String) : Result()
data class Error(val code: Int, val description: String) : Result()
object Loading : Result() // Singleton voor laadstatus
}
fun processResult(result: Result) {
when (result) {
is Result.Success -> println("Succes: ${result.message}")
is Result.Error -> println("Fout ${result.code}: ${result.description}")
Result.Loading -> println("Laden...")
// Geen else nodig, want de compiler kent alle opties
}
}
Voordelen:
- Veiligheid: Garandeert volledigheid van
whenuitdrukkingen zonderelse. - Leesbaarheid: Duidelijk aangeeft dat er een beperkte set van toestanden of subtypes mogelijk is.
- Controle: Voorkomt oncontroleerbare erfenis van buitenaf.
Verschil met enum class: sealed klassen kunnen verschillende datatypes hebben voor elk subtype (zoals Success en Error in het voorbeeld), terwijl elementen van enum class statisch zijn en alleen bepaalde eigenschappen kunnen hebben die voor iedereen gelden. sealed klassen kunnen ook object-voorbeelden (Loading) bevatten.