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()șicomponentN(). - Necesită cel puțin un parametru în constructor.
- Toți parametrii constructorului trebuie declarați ca
valsauvar. - 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
}