Ποια είναι η διαφορά μεταξύ δήλωσης πεδίων μέσα στον κατασκευαστή και στο κύριο σώμα της data class;
sobes.tech AI
Απάντηση από AI
Στην Kotlin, τα πεδία που δηλώνονται στον κύριο κατασκευαστή (ανάμεσα σε παρένθεση μετά το όνομα της κλάσης) γίνονται αυτόματα ιδιότητες της κλάσης με τις αντίστοιχες μεθόδους equals(), hashCode(), toString(), και συμμετέχουν επίσης στην αποδόμηση.
Παράδειγμα:
data class User(val name: String, val age: Int)
Εδώ, το name και το age είναι ιδιότητες της κλάσης.
Αν, αντίθετα, δηλώσετε ένα πεδίο μέσα στο σώμα της κλάσης (π.χ., μέσα στον κατασκευαστή ή ως κανονική ιδιότητα), αυτό δεν θα συμμετέχει στις αυτόματα παραγόμενες μεθόδους data class και δεν θα αποτελεί μέρος της αποδόμησης:
data class User(val name: String) {
var age: Int = 0
}
Εδώ, το age είναι μια κανονική ιδιότητα, που δεν λαμβάνεται υπόψη στο equals και σε άλλες μεθόδους.
Έτσι, η δήλωση στον κύριο κατασκευαστή καθιστά το πεδίο μέρος των "δεδομένων" της κλάσης, ενώ η δήλωση μέσα στο σώμα είναι απλώς μια επιπλέον ιδιότητα.