Sobes.tech
Junior

Mi az az immutable (változtathatatlan) objektum?

sobes.tech MI

Válasz az MI-től

Az objektumok, amelyek állapota a létrehozásuk után nem módosítható. A módosítási kísérlet mindig új objektum létrehozását eredményezi.

Java-ban az immutábilis osztályok példái:

  • String
  • primitív burkolók (Integer, Long, Boolean stb.)
  • Néhány kollekció (Collections.unmodifiableList(), Guava ImmutableList)

Előnyök:

  • Szálbiztonság (nem igényel szinkronizációt egyidejű hozzáférés esetén).
  • Egyszerű használat (az objektum állapota könnyen érthető).
  • Kulcsként használhatók HashMap-ben vagy Set elemeként (hashCode és equals() nem változik).
  • Javítják a teljesítményt cache-elés és újrafelhasználás révén.

Hátrányok:

  • Az új objektum létrehozása minden módosításnál hatékonytalan lehet gyakori változások esetén.

Saját létrehozás:

  • Jelölje a osztályt final-ként.
  • Minden mezőt privát és final-ként deklaráljon.
  • Ne biztosítson setter metódusokat.
  • Mutató mezőknél a getterben másolatokat adjon vissza, ne az eredeti objektumokra mutató hivatkozásokat.
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;
        // Másolat készítése külső változtatások elkerülése érdekében
        this.hobbies = new ArrayList<>(hobbies);
    }

    public String getName() {
        return name;
    }

    public int getAge() {
        return age;
    }

    public List<String> getHobbies() {
        // Nem módosítható lista visszaadása
        return Collections.unmodifiableList(hobbies);
    }
}