Junior
Τι είναι τα αμετάβλητα αντικείμενα (immutable);
sobes.tech AI
Απάντηση από AI
Αντικείμενα των οποίων η κατάσταση δεν μπορεί να αλλάξει μετά τη δημιουργία τους. Προσπάθεια τροποποίησης πάντα δημιουργεί ένα νέο αντικείμενο.
Παραδείγματα αμετάβλητων κλάσεων στη Java:
String- Πρωταρχικοί περιτυλίκτες (
Integer,Long,Booleanκ.λπ.) - Ορισμένες συλλογές (
Collections.unmodifiableList(),ImmutableListαπό το Guava)
Πλεονεκτήματα:
- Ασφάλεια νημάτων (δεν απαιτείται συγχρονισμός σε ταυτόχρονη πρόσβαση).
- Ευκολία στη χρήση (η κατάσταση του αντικειμένου είναι εύκολα κατανοητή).
- Μπορούν να χρησιμοποιηθούν ως κλειδιά σε HashMap ή στοιχεία σε Set (το hashCode και το equals() τους δεν αλλάζουν).
- Βελτιώνουν την απόδοση μέσω caching και επαναχρησιμοποίησης.
Μειονεκτήματα:
- Η δημιουργία νέου αντικειμένου σε κάθε τροποποίηση μπορεί να είναι αναποτελεσματική για συχνές αλλαγές.
Δημιουργία δική σας:
- Ορίστε την κλάση ως
final. - Ορίστε όλα τα πεδία ως ιδιωτικά και
final. - Μην παρέχετε μεθόδους setter.
- Στους getters για μεταβλητά πεδία, επιστρέψτε αντίγραφα αντί για αναφορές στα αρχικά αντικείμενα.
public final class ImmutablePerson {
private final String name;
private final int age;
private final List<String> hobbies;
public ImmutablePerson(String name, int age, List<String> hobbies) {
this.name = name;
this.age = age;
// Δημιουργία αντιγράφου για αποφυγή εξωτερικών αλλαγών
this.hobbies = new ArrayList<>(hobbies);
}
public String getName() {
return name;
}
public int getAge() {
return age;
}
public List<String> getHobbies() {
// Επιστρέφει μια αμετάβλητη λίστα
return Collections.unmodifiableList(hobbies);
}
}