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 |