Sobes.tech
Junior

Care este caracteristica specială a Data Class în comparație cu alte clase în Kotlin?

sobes.tech AI

Răspuns de la AI

Caracteristici ale Data Class în Kotlin:

  • Generare automată a funcțiilor equals(), hashCode(), toString(), copy() și componentN().
  • Necesită cel puțin un parametru în constructor.
  • Toți parametrii constructorului trebuie declarați ca val sau var.
  • Sunt destinate în principal pentru stocarea datelor.

Exemplu:

// Clasă obișnuită
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 (compară referințele implicit)
    println(user1.toString()) // Va afișa ceva de genul User@hashcode

    val dataUser1 = DataUser("Alice", 30)
    val dataUser2 = DataUser("Alice", 30)
    println(dataUser1 == dataUser2) // true (compară datele)
    println(dataUser1.toString()) // Va afișa DataUser(name=Alice, age=30)
}

Diferențe în funcțiile generate:

Funcție Clasă obișnuită Data Class
equals() Compararea referințelor Compararea datelor pe câmpuri
hashCode() Depinde de implementare Depinde de datele pe câmpuri
toString() Numele clasei și hash-ul Numele clasei și valorile câmpurilor
copy() Nu (este nevoie de implementare manuală) Da (permite crearea ușoară a copiilor)
componentN() Nu Da (permite deconstructurarea obiectului)

Utilizare componentN():

// Definirea unei Data Class
data class Point(val x: Int, val y: Int)

fun main() {
    val p = Point(10, 20)
    val (x, y) = p // Deconstructurare folosind component1(), component2()
    println("x: $x, y: $y") // Va afișa x: 10, y: 20
}