Sobes.tech
Middle

Vertel me over data-classes en sealed-classes in Kotlin.

sobes.tech AI

Antwoord van AI

Data klassen in Kotlin worden gebruikt voor het opslaan van gegevens. Ze genereren automatisch nuttige methoden zoals equals(), hashCode(), toString(), copy(), evenals componenten voor destructurering.

// Voorbeeld van een data klasse
data class User(val name: String, val age: Int)

Sealed klassen worden gebruikt om een beperkte hiërarchie van klassen weer te geven. Alle subklassen moeten in hetzelfde bestand worden gedefinieerd als de sealed klasse (in Kotlin 1.5+ is deze beperking versoepeld). Dit stelt de compiler in staat om een volledige controle uit te voeren op de subklassen, bijvoorbeeld in een when-uitdrukking.

// Voorbeeld van een sealed klasse
sealed class Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result()
}

// Voorbeeld van het gebruik van een sealed klasse in een `when`-uitdrukking
fun processResult(result: Result) {
    when (result) {
        is Result.Success -> println("Succes: ${result.data}")
        is Result.Error -> println("Fout: ${result.message}")
        Result.Loading -> println("Laden...")
    }
}

Belangrijkste verschillen:

  • Doel: data klassen - gegevensopslag, sealed klassen - beperking van de klassehiërarchie.
  • Gegenereerde methoden: data klassen genereren standaardmethoden voor gegevens, sealed klassen - niet.
  • Beperking van subklassen: sealed klassen leggen beperkingen op aan de declaratie van subklassen, data klassen - niet.
  • Volledige dekking in when: de Kotlin-compiler kan de volledige dekking van de subklassen van een sealed klasse controleren in when zonder else-tak.

Zowel sealed als data klassen kunnen abstract zijn, maar data klassen kunnen niet open zijn (omdat ze standaard final zijn) en kunnen niet rechtstreeks open methoden implementeren (alleen via interfaces of abstracte klassen). Sealed klassen zijn standaard abstract en hun constructors zijn privé.