0Pricing
Kotlin Academy · Lezione

Basi delle data class: metodi generati automaticamente

Comprenda cosa genera data class: equals, hashCode, toString e copy.

Basi delle data class: metodi generati automaticamente è una lezione Kotlin Academy gratuita su CoddyKit. Questa è la lezione 1 di 4. Puoi leggere la lezione completa qui gratuitamente — poi esercitati direttamente nel browser con un editor di codice integrato e un tutor IA disponibile 24/7. Fa parte del percorso di apprendimento Kotlin Academy, e i tuoi progressi si sincronizzano tra il web e l'app CoddyKit. Il corso Kotlin Academy include 4 lezioni in totale.

Che cos'è una data class?

Una data class è una classe il cui scopo principale è contenere valori. Il compilatore Kotlin genera automaticamente per Lei le funzioni equals, hashCode, toString, copy e componentN.

Dichiarare una data class

Anteponi data a una classe normale. Tutti i parametri del costruttore primario devono essere val o var.

data class User(val name: String, val age: Int)
fun main() {
    val u = User("Ada", 35)
    println(u)
}

toString generato automaticamente

Il compilatore crea un toString che elenca ogni proprietà in base al nome.

data class Point(val x: Int, val y: Int)
fun main() {
    println(Point(3, 5)) // Point(x=3, y=5)
}

equals generato automaticamente

equals confronta i valori di tutte le proprietà: due istanze con gli stessi campi sono uguali indipendentemente dall'identità del riferimento.

data class Coord(val lat: Double, val lng: Double)
fun main() {
    val a = Coord(41.0, 29.0)
    val b = Coord(41.0, 29.0)
    println(a == b)      // true (structural)
    println(a === b)     // false (reference)
}

hashCode generato automaticamente

hashCode è coerente con equals: oggetti uguali producono hash uguali, quindi le data class funzionano correttamente nei set e come chiavi delle mappe.

data class Key(val id: Int, val tag: String)
fun main() {
    val map = mapOf(Key(1, "a") to "one")
    println(map[Key(1, "a")]) // one
}

copy generato automaticamente

copy() crea una nuova istanza con gli stessi valori dei campi, consentendo di sovrascrivere singoli campi tramite argomenti denominati.

data class Config(val host: String, val port: Int, val tls: Boolean)
fun main() {
    val dev = Config("localhost", 8080, false)
    val prod = dev.copy(host = "prod.example.com", tls = true)
    println(prod) // Config(host=prod.example.com, port=8080, tls=true)
}

componentN generato automaticamente

Ogni proprietà riceve una funzione componentN() (component1, component2, ...) che abilita la destrutturazione.

data class Pair2(val first: String, val second: Int)
fun main() {
    val p = Pair2("Ada", 35)
    val (name, age) = p
    println("$name is $age")
}

Cosa non fanno le data class

Le data class non generano toString per i campi ereditati, sono final per impostazione predefinita e non possono essere abstract, open, sealed o inner.

data class Sample(val n: Int)
// open data class Bad(...) // ERROR
// sealed data class Bad(...) // ERROR
fun main() { println(Sample(1)) }

Proprietà al di fuori del costruttore primario

Le proprietà dichiarate nel corpo della classe NON partecipano a equals, hashCode, toString o copy.

data class Person(val name: String) {
    var nickname: String = ""
}
fun main() {
    val a = Person("Ada").apply { nickname = "Augusta" }
    val b = Person("Ada").apply { nickname = "Different" }
    println(a == b)   // true — only name matters
    println(a)         // Person(name=Ada)
}

Valori predefiniti

Combini data class con parametri predefiniti per una costruzione flessibile.

data class Request(
    val url: String,
    val method: String = "GET",
    val headers: Map<String, String> = emptyMap()
)
fun main() {
    println(Request("https://api.example.com"))
}

Pratica: classe DTO

Le data class sono perfette per i DTO, le risposte delle API e gli oggetti valore.

data class ApiResponse(
    val status: Int,
    val body: String,
    val timestamp: Long
)
fun main() {
    val ok = ApiResponse(200, "{}", System.currentTimeMillis())
    println(ok)
}

Verifica rapida

Quale metodo NON viene generato automaticamente dal compilatore Kotlin per una data class?

Riepilogo

Una data class genera automaticamente equals, hashCode, toString, copy e componentN a partire dalle proprietà del costruttore primario. Le proprietà al di fuori del costruttore vengono escluse. Usi le data class per DTO, oggetti valore e qualsiasi contenitore di valori correlati.

Domande Frequenti

La lezione «Basi delle data class: metodi generati automaticamente» è gratuita?

Sì — il testo completo di «Basi delle data class: metodi generati automaticamente» è gratuito qui sul web. Per esercitarvi in modo interattivo (un editor di codice integrato e un tutor IA 24/7) e sbloccare il resto del corso Kotlin Academy, passa a CoddyKit PRO. Il corso Kotlin Academy include 4 lezioni in totale.

Cosa imparerò in «Basi delle data class: metodi generati automaticamente»?

Comprenda cosa genera data class: equals, hashCode, toString e copy. Eserciti Kotlin Academy con codice pratico che esegui direttamente nel browser, e un tutor IA 24/7 risponde alle tue domande mentre lavori sulla lezione.

Ho bisogno di esperienza per iniziare Kotlin Academy?

Non è richiesta alcuna esperienza precedente. Kotlin Academy su CoddyKit è strutturato per principianti e studenti avanzati, quindi puoi iniziare da qui o dall'inizio e procedere al tuo ritmo. Questa è la lezione 1 di 4.

Quanto tempo richiede la lezione «Basi delle data class: metodi generati automaticamente»?

La maggior parte delle lezioni CoddyKit richiede circa 5–10 minuti. Ogni lezione è breve e interattiva, quindi fai progressi costanti e riprendi esattamente da dove hai lasciato su web e app.

Posso scrivere ed eseguire codice in questa lezione Kotlin Academy?

Sì. Ogni lezione Kotlin Academy include un editor di codice integrato, quindi scrivi ed esegui codice reale direttamente nel tuo browser e ricevi feedback istantaneo dall'IA — nessuna configurazione locale necessaria.

Tutte le lezioni di questo corso

  1. Basi delle data class: metodi generati automaticamente
  2. Copiare con copy() e override parziali
  3. Dichiarazioni destrutturate con componentN
  4. Data class nelle collezioni e come chiavi di map
← Torna a Kotlin Academy