Sobes.tech
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.