Sobes.tech
Middle

Kako koristiti zatvorene klase za modeliranje hijerarhija u Kotlinu?

sobes.tech АИ

Одговор од АИ

Zapečaćene klase (sealed classes) koriste se za predstavljanje ograničenih hijerarhija nasleđivanja, gde su sve moguće podklase poznate u vreme kompajliranja.

Glavne karakteristike:

  • Sve direktne podklase moraju biti u istoj datoteci kao i zapečaćena klasa (pre Kotlin 1.5). Od Kotlin 1.5, one mogu biti u bilo kojoj datoteci iste kompilacije.
  • Podklase zapečaćene klase mogu biti obične klase, data klase, deklaracije object ili druge zapečaćene klase.
  • Konstruktor zapečaćene klase je podrazumevano privatni; drugi modifikatori (public, protected, internal) nisu dozvoljeni.
  • Omogućavaju korišćenje iscrpne (exhaustive) analize u when izrazima, što garantuje obradu svih mogućih varijanti i eliminiše potrebu za else granom.

Primer korišćenja za modelovanje stanja korisničkog interfejsa:

sealed class UiState {
    object Loading : UiState() // Stanje učitavanja
    data class Success(val data: String) : UiState() // Uspešno učitavanje podataka
    data class Error(val message: String) : UiState() // Greška
}

Korišćenje u when izrazu:

fun handleUiState(state: UiState): String {
    return when (state) {
        UiState.Loading -> "Učitavanje podataka..."
        is UiState.Success -> "Podaci uspešno učitani: ${state.data}"
        is UiState.Error -> "Greška: ${state.message}"
    }
}

Prednosti:

  • Bezbednost tipa: kompajler proverava da su sve moguće podklase obrađene.
  • Čitljivost: jasno pokazuje koje varijante podataka ili stanja mogu postojati.
  • Udobnost: pojednostavljuje rad sa when izrazima.