Sobes.tech
Middle

Cum să folosiți clasele sigilate pentru a modela ierarhii în Kotlin?

sobes.tech AI

Răspuns de la AI

Clasele sigilate (sealed classes) sunt utilizate pentru a reprezenta ierarhii limitate de moștenire, unde toate subclasele posibile sunt cunoscute în timpul compilării.

Caracteristici principale:

  • Toate subclasele directe trebuie să se afle în același fișier cu clasa sigilată (înainte de Kotlin 1.5). Începând cu Kotlin 1.5, acestea pot fi în orice fișier din aceeași compilare.
  • Subclasele unei clase sigilate pot fi clase normale, data classes, declarații object sau alte clase sigilate.
  • Constructorul clasei sigilate este privat implicit; alte modificatoare (public, protected, internal) nu sunt permise.
  • Permite utilizarea unei analize exhaustive (exhaustive) în expresiile when, ceea ce garantează tratarea tuturor opțiunilor posibile și elimină necesitatea unei ramuri else.

Exemplu de utilizare pentru modelarea stării unei interfețe de utilizator:

sealed class UiState {
    object Loading : UiState() // Stare de încărcare
    data class Success(val data: String) : UiState() // Date încărcate cu succes
    data class Error(val message: String) : UiState() // Eroare
}

Utilizare în expresia when:

fun handleUiState(state: UiState): String {
    return when (state) {
        UiState.Loading -> "Se încarcă datele..."
        is UiState.Success -> "Date încărcate cu succes: ${state.data}"
        is UiState.Error -> "Eroare: ${state.message}"
    }
}

Avantaje:

  • Siguranță de tip: compilatorul verifică dacă toate subclasele posibile sunt tratate.
  • Claritate: arată clar ce variante de date sau stări pot exista.
  • Conveniență: simplifică lucrul cu expresiile when.