Sobes.tech
Junior

Cosa sono gli oggetti immutabili?

sobes.tech AI

Risposta dell'AI

Oggetti il cui stato non può essere modificato dopo la creazione. In caso di tentativo di modifica, viene sempre creato un nuovo oggetto.

Esempi di classi immutabili in Java:

  • String
  • Wrappers primitivi (Integer, Long, Boolean, ecc.)
  • Alcune collezioni (Collections.unmodifiableList(), ImmutableList di Guava)

Vantaggi:

  • Sicurezza thread (non richiedono sincronizzazione in accesso concorrente).
  • Facilità d'uso (stato dell'oggetto facile da comprendere).
  • Possono essere usate come chiavi in HashMap o elementi in Set (il loro hashCode e equals() non cambiano).
  • Migliorano le prestazioni grazie a caching e riutilizzo.

Svantaggi:

  • La creazione di un nuovo oggetto ad ogni modifica può essere inefficiente per modifiche frequenti.

Creazione propria:

  • Dichiarare la classe come final.
  • Dichiarare tutti i campi come privati e final.
  • Non fornire metodi setter.
  • Nei metodi getter per campi mutabili, restituire copie invece di riferimenti agli oggetti originali.
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;
        // Creare una copia per evitare modifiche esterne
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Restituire una lista non modificabile
        return Collections.unmodifiableList(hobbies);
    }
}