Sobes.tech
Middle

Wat zijn sealed-klassen en wat is hun doel?

sobes.tech AI

Antwoord van AI

Gesloten klassen vertegenwoordigen beperkte hiërarchieën van klassen. Ze worden gebruikt om een beperkte set van mogelijke toestanden of waarden weer te geven.

Belangrijkste kenmerken en doel:

  • Beperkte hiërarchie: Afgeleiden van een sealed-klasse moeten vóór Kotlin 1.5 in hetzelfde bestand of genest binnen de sealed-klasse worden gedeclareerd. Vanaf versie 1.5 is deze beperking versoepeld: afgeleiden kunnen in elk bestand van dezelfde package zijn.
  • Enum-klassen met toestand: In tegenstelling tot enum-klassen kan elke afgeleide van een sealed-klasse zijn eigen toestand en gedrag hebben.
  • Uitputtende when: De compiler garandeert dat de when-blok voor een instantie van een sealed-klasse uitputtend is (alle gevallen worden gedekt), tenzij een else-tak is gespecificeerd. Dit vermindert de kans op runtime-fouten.

Voorbeeld:

sealed class Result<out T> {
    data class Success<out T>(val data: T) : Result<T>()
    data class Error(val exception: Exception) : Result<Nothing>()
    object Loading : Result<Nothing>() // Enkel exemplaar
}

fun processResult(result: Result<String>) {
    when (result) {
        is Result.Success -> {
            // Verwerking van succesvolle resultaat
            println("Data: ${result.data}")
        }
        is Result.Error -> {
            // Verwerking van fout
            println("Error: ${result.exception.message}")
        }
        Result.Loading -> {
            // Verwerking van laadstatus
            println("Loading data...")
        }
        // Geen `else` tak nodig, omdat alle subklassen
        // Result worden gedekt door de compiler
    }
}

Doel:

  • Veilige representatie van toestanden: Betrouwbaar de eindige set van mogelijke toestanden weergeven, bijvoorbeeld het resultaat van een netwerkverzoek (Success, Error, Loading).
  • Verbetering van de leesbaarheid: De code explicieter maken bij het afhandelen van verschillende gevallen.
  • Verhoogde betrouwbaarheid van when-uitdrukkingen: De compiler helpt onbehandelde gevallen te voorkomen.
  • Vervanging van enum-klassen met toestand: Wanneer het nodig is om gegevens te koppelen aan specifieke "varianten" van een enumeratie.

Op deze manier bieden sealed-klassen een flexibele manier om eindige verzamelingen van waarden te modelleren met de mogelijkheid om specifieke gegevens voor elke waarde op te slaan, terwijl ze veiligheid en duidelijkheid bieden bij het verwerken van deze waarden in when-uitdrukkingen.