Junior — Middle
W jakich przypadkach lepiej używać sealed class zamiast enum w Kotlin?
sobes.tech AI
Odpowiedź od AI
Klasa sealed w Kotlinie jest preferowana nad enum, gdy trzeba opisać ograniczony zbiór typów z różną strukturą danych i zachowaniem, a nie tylko zestaw stałych.
Różnice i kiedy używać sealed class:
- Różne dane w wariantach: W enum wszystkie elementy to stałe tego samego typu, podczas gdy sealed class pozwala każdej podklasie mieć własne właściwości i metody.
- Dziedziczenie i rozszerzalność: Sealed class to klasa bazowa z ograniczoną liczbą dziedziczących, co jest przydatne do wyrażania hierarchii.
- Użycie w when: Kompilator sprawdza kompletność when dla sealed class, co zwiększa bezpieczeństwo.
Przykład sealed class:
sealed class Wynik {
data class Sukces(val dane: String) : Wynik()
data class Błąd(val error: Throwable) : Wynik()
object Ładowanie : Wynik()
}
fun obsłużWynik(wynik: Wynik) {
when(wynik) {
is Wynik.Sukces -> println("Dane: ${wynik.dane}")
is Wynik.Błąd -> println("Błąd: ${wynik.error.message}")
Wynik.Ładowanie -> println("Ładowanie...")
}
}
Jeśli potrzebujesz tylko listy stałych bez danych, enum będzie prostszy i bardziej wydajny.