Junior
V čom spočíva vlastnosť Data Class v porovnaní s inými triedami v Kotlin?
sobes.tech AI
Odpoveď od AI
Vlastnosti dátovej triedy v Kotlin:
- Automatické generovanie funkcií
equals(),hashCode(),toString(),copy()acomponentN(). - Vyžadujú aspoň jeden parameter v konštruktore.
- Všetky parametre konštruktora musia byť deklarované ako
valalebovar. - Sú určené predovšetkým na ukladanie dát.
Príklad:
// Bežná trieda
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 (porovnáva referencie podľa predvoleného nastavenia)
println(user1.toString()) // Vypíše niečo ako User@hashcode
val dataUser1 = DataUser("Alice", 30)
val dataUser2 = DataUser("Alice", 30)
println(dataUser1 == dataUser2) // true (porovnáva údaje)
println(dataUser1.toString()) // Vypíše DataUser(name=Alice, age=30)
}
Rozdiely v generovaných funkciách:
| Funkcia | Bežná trieda | Data Class |
|---|---|---|
equals() |
Porovnanie referencií | Porovnanie údajov podľa polí |
hashCode() |
Závisí od implementácie | Závisí od údajov podľa polí |
toString() |
Názov triedy a hash kód | Názov triedy a hodnoty polí |
copy() |
Nie (je potrebná manuálna implementácia) | Áno (umožňuje ľahké vytváranie kópií) |
componentN() |
Nie | Áno (umožňuje destrukturovať objekt) |
Použitie componentN():
// Definícia dátovej triedy
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(10, 20)
val (x, y) = p // Destrukturovanie pomocou component1(), component2()
println("x: $x, y: $y") // Vypíše x: 10, y: 20
}