Junior
Ποιο είναι το χαρακτηριστικό της Data Class σε σύγκριση με άλλα κλάσεις στο Kotlin;
sobes.tech AI
Απάντηση από AI
Χαρακτηριστικά της Data Class σε Kotlin:
- Αυτόματη δημιουργία των συναρτήσεων
equals(),hashCode(),toString(),copy()καιcomponentN(). - Απαιτούν τουλάχιστον μία παράμετρο στον κατασκευαστή.
- Όλες οι παράμετροι του κατασκευαστή πρέπει να δηλώνονται ως
valήvar. - Σχεδιασμένες κυρίως για την αποθήκευση δεδομένων.
Παράδειγμα:
// Κανονική κλάση
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 (συγκρίνει αναφορές από προεπιλογή)
println(user1.toString()) // Θα εμφανίσει κάτι σαν User@hashcode
val dataUser1 = DataUser("Alice", 30)
val dataUser2 = DataUser("Alice", 30)
println(dataUser1 == dataUser2) // true (συγκρίνει δεδομένα)
println(dataUser1.toString()) // Θα εμφανίσει DataUser(name=Alice, age=30)
}
Διαφορές στις δημιουργούμενες συναρτήσεις:
| Συνάρτηση | Κανονική κλάση | Data Class |
|---|---|---|
equals() |
Σύγκριση αναφορών | Σύγκριση δεδομένων ανά πεδία |
hashCode() |
Εξαρτάται από την υλοποίηση | Εξαρτάται από τα δεδομένα πεδίων |
toString() |
Όνομα κλάσης και hash | Όνομα κλάσης και τιμές πεδίων |
copy() |
Όχι (απαιτεί χειροκίνητη υλοποίηση) | Ναι (επιτρέπει εύκολη δημιουργία αντιγράφων) |
componentN() |
Όχι | Ναι (επιτρέπει αποσυναρμολόγηση αντικειμένου) |
Χρήση του componentN():
// Ορισμός Data Class
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(10, 20)
val (x, y) = p // Αποσυναρμολόγηση με component1(), component2()
println("x: $x, y: $y") // Θα εμφανίσει x: 10, y: 20
}