Junior
Na czym polega cecha Data Class w porównaniu z innymi klasami w Kotlin?
sobes.tech AI
Odpowiedź od AI
Cechy Data Class w Kotlin:
- Automatyczne generowanie funkcji
equals(),hashCode(),toString(),copy()icomponentN(). - Wymagają co najmniej jednego parametru w konstruktorze.
- Wszystkie parametry konstruktora muszą być zadeklarowane jako
vallubvar. - Przeznaczone głównie do przechowywania danych.
Przykład:
// Klasa zwykła
class User(val name: String, val age: Int)
// Data Class
data class DataUser(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 30)
val user2 = User("Alice", 30)
println(user1 == user2) // false (domyślnie porównuje referencje)
println(user1.toString()) // Wyświetli coś w stylu User@hashcode
val dataUser1 = DataUser("Alice", 30)
val dataUser2 = DataUser("Alice", 30)
println(dataUser1 == dataUser2) // true (porównuje dane)
println(dataUser1.toString()) // Wyświetli DataUser(name=Alice, age=30)
}
Różnice w funkcjach generowanych:
| Funkcja | Klasa zwykła | Data Class |
|---|---|---|
equals() |
Porównanie referencji | Porównanie danych po polach |
hashCode() |
Zależy od implementacji | Zależy od danych po polach |
toString() |
Nazwa klasy i hash | Nazwa klasy i wartości pól |
copy() |
Nie (wymaga ręcznej implementacji) | Tak (pozwala na łatwe tworzenie kopii) |
componentN() |
Nie | Tak (pozwala na destrukturyzację obiektu) |
Użycie componentN():
// Definicja Data Class
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(10, 20)
val (x, y) = p // Destrukturyzacja za pomocą component1(), component2()
println("x: $x, y: $y") // Wyświetli x: 10, y: 20
}