Sobes.tech
Junior

Τι μπορείς να πεις για τις ιδιότητες και επίσης τις μεθόδους get και set στο Kotlin;

sobes.tech AI

Απάντηση από AI

Στην Kotlin, οι ιδιότητες αποτελούν έναν συνδυασμό πεδίου και των αντίστοιχων getter και setter.

Ορισμός ιδιότητας:

class MyClass {
    var mutableProperty: String = "default"
    val immutableProperty: Int = 10
}

Εδώ, το mutableProperty είναι μια μεταβλητή ιδιότητα με τις προεπιλεγμένες μεθόδους getter και setter. Το immutableProperty είναι μια αμετάβλητη ιδιότητα με μόνο προεπιλεγμένο getter.

Αναλυτικός ορισμός getter και setter:

class MyClass {
    var customProperty: String = ""
        get() = field.toUpperCase() // Προσαρμοσμένος getter
        set(value) {
            field = value.toLowerCase() // Προσαρμοσμένος setter
        }

    val computedProperty: Int
        get() = (1..10).random() // Υπολογιζόμενη ιδιότητα, δεν έχει πεδίο
}
  • field - αναφορά στο πεδίο της ιδιότητας μέσα στον getter και setter. Χρησιμοποιείται μόνο για μεταβλητές ιδιότητες (var).
  • Οι getter και setter μπορούν να προσαρμοστούν, εκτελώντας πρόσθετη λογική κατά την πρόσβαση ή την αλλαγή της ιδιότητας.
  • Οι υπολογιζόμενες ιδιότητες (computedProperty) δεν έχουν δικό τους πεδίο και πάντα υπολογίζουν την τιμή κατά την πρόσβαση.

Βασικά σημεία:

  • Στην Kotlin, δεν χρειάζεται να δημιουργείτε ρητά getters και setters για κάθε πεδίο, καθώς αυτοί παράγονται αυτόματα.
  • Οι ιδιότητες προσπελάζονται μέσω σημείου σημειογραφίας (instance.propertyName).
  • Ο ρητός ορισμός getter και setter επιτρέπει την προσθήκη λογικής κατά την πρόσβαση ή την αλλαγή της ιδιότητας.
  • Οι getters για val ιδιότητες πρέπει πάντα να επιστρέφουν τιμή του ίδιου τύπου.
  • Οι setters για var ιδιότητες δέχονται παράμετρο του ίδιου τύπου.

Σύγκριση ιδιοτήτων στην Kotlin και πεδίων+μεθόδων στην Java:

Kotlin Ιδιότητα Java Πεδίο + Μέθοδοι Περιγραφή
var myProperty: Τύπος private Τύπος myProperty; + public Τύπος getMyProperty() + public void setMyProperty(Τύπος τιμή) Μεταβλητή ιδιότητα με αυτόματους getter και setter.
val myProperty: Τύπος private Τύπος myProperty; + public Τύπος getMyProperty() Αμετάβλητη ιδιότητα με μόνο αυτόματο getter.
Προσαρμοσμένος getter/setter Χειροκίνητη υλοποίηση λογικής Προσθήκη λογικής κατά την πρόσβαση ή την αλλαγή.
Υπολογιζόμενη ιδιότητα Ρητή μέθοδος που επιστρέφει τιμή Η τιμή της ιδιότητας υπολογίζεται σε κάθε αίτηση.