Junior
Jak działają klasy danych w Kotlinie?
sobes.tech AI
Odpowiedź od AI
Klasy danych w Kotlinie służą do przechowywania danych. Kompilator automatycznie generuje dla nich metody standardowe:
equals(): Porównuje instancje na podstawie wartości ich właściwości.hashCode(): Generuje kod hash na podstawie wartości właściwości.toString(): Zwraca reprezentację tekstową zawierającą nazwy i wartości wszystkich właściwości.copy(): Tworzy kopię obiektu, ewentualnie zmieniając wartości wskazanych właściwości.componentN(): Metody do destrukturyzacji (rozbicia obiektu na poszczególne właściwości).
// Przykład klasy danych
data class User(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 30)
val user2 = User("Alice", 30)
val user3 = User("Bob", 25)
// equals()
println(user1 == user2) // true
println(user1 == user3) // false
// toString()
println(user1.toString()) // User(name=Alice, age=30)
// copy()
val user4 = user1.copy(age = 31)
println(user4) // User(name=Alice, age=31)
// componentN() i destrukturyzacja
val (name, age) = user1
println("Nazwa: $name, Wiek: $age") // Nazwa: Alice, Wiek: 30
}
Kluczowe punkty:
- Wszystkie właściwości zdefiniowane w głównym konstruktorze muszą być
vallubvar. - Klasa danych nie może być
abstract,open,sealedlubinner. - Klasy danych mogą dziedziczyć po innych klasach lub implementować interfejsy.
- Właściwości zadeklarowane poza głównym konstruktorem nie uczestniczą w generowaniu metod standardowych.
| Metoda | Opis |
|---|---|
equals() |
Porównuje właściwości głównego konstruktora. |
hashCode() |
Generuje hash na podstawie właściwości głównego konstruktora. |
toString() |
Wyświetla tekstową reprezentację właściwości głównego konstruktora. |
copy() |
Tworzy płytką kopię z możliwością modyfikacji właściwości. |
componentN() |
Dostęp do właściwości w kolejności ich deklaracji w konstruktorze. |
Klasy danych znacznie upraszczają pracę z POJO (Plain Old Java Object) lub DTO (Data Transfer Object), redukując kod boilerplate.