Sobes.tech
Junior

Ce sunt obiectele imutabile?

sobes.tech AI

Răspuns de la AI

Obiecte a căror stare nu poate fi modificată după crearea lor. Orice încercare de modificare duce întotdeauna la crearea unui nou obiect.

Exemple de clase imutabile în Java:

  • String
  • Învelișuri primitive (Integer, Long, Boolean etc.)
  • Unele colecții (Collections.unmodifiableList(), ImmutableList din Guava)

Avantaje:

  • Siguranță în fire (nu necesită sincronizare la accesul concurent).
  • Ușurință în utilizare (starea obiectului este ușor de înțeles).
  • Pot fi utilizate ca chei în HashMap sau elemente în Set (hashCode și equals() nu se schimbă).
  • Îmbunătățesc performanța prin caching și reutilizare.

Dezavantaje:

  • Crearea unui nou obiect la fiecare modificare poate fi ineficientă pentru modificări frecvente.

Creare proprie:

  • Declarați clasa ca final.
  • Declarați toate câmpurile ca private și final.
  • Nu furnizați metode setter.
  • În getters pentru câmpurile mutabile, returnați copii, nu referințe la obiectele originale.
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;
        // Creăm o copie pentru a evita modificările externe
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Returnăm o listă inalterabilă
        return Collections.unmodifiableList(hobbies);
    }
}