Назад к вопросам
Junior
80
questionbank
Что такое неизменяемые объекты (immutable)?
Sobes Copilot
Получайте ответы в реальном времени
Ответ от нейросети
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);
}
}