Junior
Mi a Data Class sajátossága a többi osztályhoz képest Kotlinban?
sobes.tech MI
Válasz az MI-től
A Data Class Kotlinban jellemzői:
- Az
equals(),hashCode(),toString(),copy()éscomponentN()függvények automatikus generálása. - Legalább egy paraméter szükséges a konstruktorban.
- Minden konstruktor paramétert
valvagyvar-ként kell deklarálni. - Elsődleges céljuk az adatok tárolása.
Példa:
// Szokásos osztály
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) // hamis (alapértelmezés szerint referencia összehasonlítás)
println(user1.toString()) // Valami ilyesmit fog kiírni, mint User@hashcode
val dataUser1 = DataUser("Alice", 30)
val dataUser2 = DataUser("Alice", 30)
println(dataUser1 == dataUser2) // igaz (adatok összehasonlítása)
println(dataUser1.toString()) // DataUser(name=Alice, age=30)
}
A generált függvények közötti különbségek:
| Funkció | Szokásos osztály | Data Class |
|---|---|---|
equals() |
Referencia összehasonlítás | Adatok összehasonlítása mezők szerint |
hashCode() |
Implementációtól függ | Adatok szerint mezők alapján |
toString() |
Osztály neve és hash kód | Osztály neve és mezők értékei |
copy() |
Nem (kézi megvalósítás szükséges) | Igen (könnyen másolat készíthető) |
componentN() |
Nem | Igen (az objektum destrukturálható) |
A componentN() használata:
// Data Class definiálása
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(10, 20)
val (x, y) = p // component1(), component2() segítségével destrukturálás
println("x: $x, y: $y") // x: 10, y: 20
}