Junior
104
questionbank
Что такое неизменяемые объекты (immutable)?
Ответ от нейросети
sobes.tech AI
Объекты, состояние которых не может быть изменено после создания. При попытке модификации всегда создается новый объект.
Примеры неизменяемых классов в Java:
String- Примитивные обертки (
Integer,Long,Booleanи т.д.) - Некоторые коллекции (
Collections.unmodifiableList(),ImmutableListиз Guava)
Преимущества:
- Потокобезопасность (не требуют синхронизации при совместном доступе).
- Простота в использовании (легко понять состояние объекта).
- Могут использоваться как ключи в HashMap или элементы Set (их хеш-код и 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);
}
}