Junior
Qual è la caratteristica della Data Class rispetto ad altre classi in Kotlin?
sobes.tech AI
Risposta dell'AI
Caratteristiche della Data Class in Kotlin:
- Generazione automatica delle funzioni
equals(),hashCode(),toString(),copy()ecomponentN(). - Richiedono almeno un parametro nel costruttore.
- Tutti i parametri del costruttore devono essere dichiarati come
valovar. - Sono principalmente destinate a memorizzare dati.
Esempio:
// Classe normale
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 (confronta i riferimenti di default)
println(user1.toString()) // Mostrerà qualcosa come User@hashcode
val dataUser1 = DataUser("Alice", 30)
val dataUser2 = DataUser("Alice", 30)
println(dataUser1 == dataUser2) // true (confronta i dati)
println(dataUser1.toString()) // Mostrerà DataUser(name=Alice, age=30)
}
Differenze nelle funzioni generate:
| Funzione | Classe normale | Data Class |
|---|---|---|
equals() |
Confronto di riferimenti | Confronto dei dati per campi |
hashCode() |
Dipende dall'implementazione | Dipende dai dati per campi |
toString() |
Nome della classe e hash | Nome della classe e valori dei campi |
copy() |
No (richiede implementazione manuale) | Sì (consente di creare copie facilmente) |
componentN() |
No | Sì (consente di destrutturare l'oggetto) |
Utilizzo di componentN():
// Definizione di una Data Class
data class Point(val x: Int, val y: Int)
fun main() {
val p = Point(10, 20)
val (x, y) = p // Destrutturazione usando component1(), component2()
println("x: $x, y: $y") // Mostrerà x: 10, y: 20
}