Sobes.tech
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