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 | Χειροκίνητη υλοποίηση λογικής | Προσθήκη λογικής κατά την πρόσβαση ή την αλλαγή. |
| Υπολογιζόμενη ιδιότητα | Ρητή μέθοδος που επιστρέφει τιμή | Η τιμή της ιδιότητας υπολογίζεται σε κάθε αίτηση. |