Sobes.tech
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);
    }
}