Объекты, состояние которых не может быть изменено после создания. При попытке модификации всегда создается новый объект.
Примеры неизменяемых классов в Java:
String
- Примитивные обертки (
Integer, Long, Boolean и т.д.)
- Некоторые коллекции (
Collections.unmodifiableList(), ImmutableList из Guava)
Преимущества:
- Потокобезопасность (не требуют синхронизации при совместном доступе).
- Простота в использовании (легко понять состояние объекта).
- Могут использоваться как ключи в HashMap или элементы Set (их хеш-код и equals() не меняются).
- Улучшают производительность за счет возможности кэширования и повторного использования.
Недостатки:
- Создание нового объекта при каждой модификации может быть неэффективным для частых изменений.
Создание своих:
- Объявить класс
final.
- Объявить все поля приватными и
final.
- Не предоставлять методов-сеттеров.
- В геттерах для мутабельных полей возвращать копии, а не ссылки на оригинальные объекты.
java