Junior
Come funzionano le classi dati in Kotlin?
sobes.tech AI
Risposta dell'AI
Le classi dati in Kotlin vengono utilizzate per memorizzare i dati. Il compilatore genera automaticamente i metodi standard:
equals(): Confronta le istanze in base ai valori delle loro proprietà.hashCode(): Genera un codice hash basato sui valori delle proprietà.toString(): Restituisce una rappresentazione in stringa che include i nomi e i valori di tutte le proprietà.copy(): Crea una copia dell'oggetto, modificando se necessario i valori delle proprietà indicate.componentN(): Metodi per la destrutturazione (scomposizione dell'oggetto in proprietà individuali).
// Esempio di classe dati
data class User(val name: String, val age: Int)
fun main() {
val user1 = User("Alice", 30)
val user2 = User("Alice", 30)
val user3 = User("Bob", 25)
// equals()
println(user1 == user2) // true
println(user1 == user3) // false
// toString()
println(user1.toString()) // User(name=Alice, age=30)
// copy()
val user4 = user1.copy(age = 31)
println(user4) // User(name=Alice, age=31)
// componentN() e destrutturazione
val (name, age) = user1
println("Nome: $name, Età: $age") // Nome: Alice, Età: 30
}
Punti chiave:
- Tutte le proprietà definite nel costruttore principale devono essere
valovar. - La classe di dati non può essere
abstract,open,sealedoinner. - Le classi di dati possono ereditare altre classi o implementare interfacce.
- Le proprietà dichiarate fuori dal costruttore principale non partecipano alla generazione dei metodi standard.
| Metodo | Descrizione |
|---|---|
equals() |
Confronta le proprietà del costruttore principale. |
hashCode() |
Genera un hash basato sulle proprietà del costruttore principale. |
toString() |
Mostra una rappresentazione in stringa delle proprietà del costruttore principale. |
copy() |
Crea una copia superficiale con la possibilità di modificare le proprietà. |
componentN() |
Accede alle proprietà in ordine di dichiarazione nel costruttore. |
Le classi di dati semplificano notevolmente il lavoro con POJO (Plain Old Java Object) o DTO (Data Transfer Object), riducendo il codice boilerplate.