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.