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(), ircomponentN()funkcijos. - Reikalauja bent vieno parametro konstruktoriuje.
- Visi konstruktoriaus parametrai turi būti deklaruoti kaip
valarbavar. - 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
}