Sobes.tech
Middle

Do czego służą klasy danych i klasy sealed w Kotlin?

sobes.tech AI

Odpowiedź od AI

Klasy danych ułatwiają tworzenie klas przeznaczonych wyłącznie do przechowywania danych. Kompilator automatycznie generuje dla nich:

  • equals()
  • hashCode()
  • toString()
  • copy()
  • componentN() do destrukturyzacji
klasa danych User(val name: String, val age: Int)

// Użycie
val user = User("Alice", 30)
println(user) // Wyświetla User(name=Alice, age=30)
val user2 = user.copy(age = 31)
val (name, age) = user // Destrukturyzacja

Klasy zamknięte (sealed) reprezentują ograniczoną hierarchię klas, w której wszystkie możliwe podklasy są znane podczas kompilacji. Pozwala to na ich użycie w wyrażeniach when bez bloku else, gwarantując wyczerpującą kontrolę wszystkich opcji.

klasa zamknięta Result {
    data class Success(val data: String) : Result()
    data class Error(val message: String) : Result()
    object Loading : Result() // Obiekt, ponieważ brak parametrów
}

fun handleResult(result: Result) {
    when (result) {
        is Result.Success -> println("Sukces: ${result.data}")
        is Result.Error -> println("Błąd: ${result.message}")
        Result.Loading -> println("Ładowanie...")
    }
}

Porównanie:

Cecha Klasa danych Klasa zamknięta
Cel Przechowywanie danych Ograniczona hierarchia klas
Możliwości Automatyczne generowanie metod Wyczerpująca kontrola w when
Podklasy Brak ograniczeń Muszą być w tym samym pliku lub module
Użycie Modele danych, DTO Reprezentacja stanów, zdarzeń, wariantów