Middle
Waarvoor worden data-classes en sealed-classes gebruikt in Kotlin?
sobes.tech AI
Antwoord van AI
Data-klassen vereenvoudigen het maken van klassen die alleen bedoeld zijn voor het opslaan van gegevens. De compiler genereert automatisch:
equals()hashCode()toString()copy()componentN()voor destructurering
data class User(val naam: String, val leeftijd: Int)
// Gebruik
val user = User("Alice", 30)
println(user) // Toont User(naam=Alice, leeftijd=30)
val user2 = user.copy(leeftijd = 31)
val (naam, leeftijd) = user // Destructurering
Gesloten klassen (sealed) vertegenwoordigen een beperkte hiërarchie van klassen, waarbij alle mogelijke subklassen bekend zijn tijdens compilatie. Dit stelt je in staat om ze te gebruiken in when-uitdrukkingen zonder else-blok, wat een volledige controle over alle opties garandeert.
sealed class Result {
data class Success(val data: String) : Result()
data class Error(val message: String) : Result()
object Loading : Result() // Object, omdat geen parameters
}
fun handleResult(result: Result) {
when (result) {
is Result.Success -> println("Succes: ${result.data}")
is Result.Error -> println("Fout: ${result.message}")
Result.Loading -> println("Laden...")
}
}
Vergelijking:
| Kenmerk | Data-klasse | Gesloten klasse |
|---|---|---|
| Doel | Opslag van gegevens | Beperkte klasse-hiërarchie |
| Mogelijkheden | Automatische methoden genereren | Volledige controle in when |
| Subklassen | Geen specifieke beperking | Moeten in hetzelfde bestand of module zijn |
| Gebruik | Gegevensmodellen, DTO's | Weergave van toestanden, gebeurtenissen, varianten |