Sobes.tech
Junior

Šta su nemutabilni objekti (immutable)?

sobes.tech АИ

Одговор од АИ

Објекти whose стање не може бити изменјено након стварања. Покушај измене увек резултује стварањем новог објекта.

Примери неизменљивих класа у Јави:

  • String
  • Примитивни обвити (Integer, Long, Boolean итд.)
  • Неки колекције (Collections.unmodifiableList(), ImmutableList из Guava)

Предности:

  • Безбедност у нитима (не захтевају синхронизацију при заједничком приступу).
  • Једноставност у коришћењу (стање објекта је лако разумљиво).
  • Могу се користити као кључеви у HashMap или елементи у Set (њихов hashCode и equals() не мењају се).
  • Побољшавају перформансе кроз кеширање и поновну употребу.

Недостаци:

  • Стварање новог објекта при свакој измени може бити неефикасно за честе промене.

Своје креирање:

  • Декларишите класу као final.
  • Декларишите сва поља као приватна и final.
  • Не пружајте методе сеттер.
  • У геттерима за мутабилна поља враћајте копије, а не референце на оригиналне објекте.
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);
    }
}