Sobes.tech
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() és componentN() függvények automatikus generálása.
  • Legalább egy paraméter szükséges a konstruktorban.
  • Minden konstruktor paramétert val vagy var-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
}