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);
}
}