Sobes.tech
Junior — Middle

Qual è la differenza tra la dichiarazione dei campi all'interno del costruttore e nel corpo principale della data class?

sobes.tech AI

Risposta dell'AI

In Kotlin, i campi dichiarati nel costruttore principale (tra parentesi dopo il nome della classe) diventano automaticamente proprietà della classe con metodi corrispondenti equals(), hashCode(), toString(), e partecipano anche alla destrutturazione.

Esempio:

data class User(val name: String, val age: Int)

Qui, name e age sono proprietà della classe.

Se invece si dichiara un campo all’interno del corpo della classe (ad esempio, nel costruttore o come proprietà normale), non parteciperà ai metodi data class generati automaticamente e non sarà parte della destrutturazione:

data class User(val name: String) {
    var age: Int = 0
}

Qui, age è una proprietà normale, non considerata in equals e altri metodi.

Pertanto, dichiarare nel costruttore principale rende il campo parte dei "dati" della classe, mentre dichiararlo all’interno del corpo è semplicemente un’ulteriore proprietà.