Ερώτηση γενική για Java: "Τρωτότητα" των private attributes προσπελάσιμων μέσω getters
-
Αν έχουμε ένα private string attribute, ουσιαστικά αυτό δείχνει σε ένα αντικείμενο τύπου string. Σε μία αντίστοιχη getter, επιστρέφεται αναφορά σε αυτό το String, άρα ο καλών αποκτά πρόσβαση στο private attribute? Πως θα μπορούσε να λυθεί αυτό, αν όντως ισχύει (εγώ θα πρότεινα επιστροφή του string (έστω str) με return str+"";)?
-
Ναι επιστρέφει το ίδιο αντικείμενο που είναι private. Τι πρόβλημα σκέφτεσαι ότι έχει αυτό;
Το πρόβλημα που νομίζω θα υπήρχε είναι αν μπορούσε να το αλλάξουμε και δεν το θέλουμε. Αν δηλαδή το αντικείμενο έχει μεθόδους που μπορούν να το αλλάξουν.
Αυτό που προτείνεις είναι αρκετά safe αλλά υπάρχει μεγάλο κόστος γιατί κάθε φορά πρέπει να "αντιγράφεις" το αντικείμενο που μπορεί να είναι μεγάλο.
Το String δεν μπορείς να το αλλάξεις. Αν παρατηρήσεις τις μεθόδους παράγουν καινούργια Strings σε κάθε πράξη και δεν αλλάζουν το υπάρχων.
Άλλα αντικείμενα που προσφέρουν και αλλαγή, πχ.
ArrayList
, υπάρχουν άλλες "τεχνικές" για να μην επιτρέψεις τις αλλαγές που δεν αντιγράφουν το αντικείμενο. ΓΙα το συγκεκριμένο παράδειγμα υπάρχει η unmodifiableList. Το όνομα της τεχνικής είναιDecorator
ήWrapper
και θα το πούμε σύντομα!