Sobes.tech
Junior

Kuo skiriasi Data Class nuo kitų klasių Kotlin'e?

sobes.tech AI

Atsakymas iš AI

Kotlin kalboje Data Class ypatumai:

  • Automatiškai sugeneruojami equals(), hashCode(), toString(), copy(), ir componentN() funkcijos.
  • Reikalauja bent vieno parametro konstruktoriuje.
  • Visi konstruktoriaus parametrai turi būti deklaruoti kaip val arba var.
  • Pirmiausia skirti duomenų saugojimui.

Pavyzdys:

// Paprastas klasės pavyzdys
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 (lyginama nuorodų reikšmė)
    println(user1.toString()) // Panašus į User@hash kodas

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (lyginama duomenys)
    println(dataUser1.toString()) // DataUser(name=Alice, age=30)
}

Skirtumai sugeneruotose funkcijose:

Funkcija Paprasta klasė Data Class
equals() Nuorodų palyginimas Duomenų palyginimas pagal laukus
hashCode() Priklauso nuo įgyvendinimo Priklauso nuo laukų duomenų
toString() Klasės pavadinimas ir hash kodas Klasės pavadinimas ir laukų reikšmės
copy() Nėra (reikia rankiniu būdu) Yra (leidžia lengvai kurti kopijas)
componentN() Nėra Yra (leidžia destruktūrizuoti objektą)

componentN() naudojimas:

data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // destruktyvus išskleidimas naudojant component1(), component2()
    println("x: $x, y: $y") // Output: x: 10, y: 20
}