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
whenizrazima.