Immutable классы — это классы, объекты которых невозможно изменить после создания. Все их поля объявляются как final и инициализируются однократно в конструкторе(ах).
Основные характеристики:
- Thread-safety: Объекты являются потокобезопасными по своей природе, так как их состояние никогда не меняется. Для работы с ними не требуется синхронизация.
- Простота: Их легче проектировать, реализовывать и использовать, поскольку не нужно беспокоиться об изменениях состояния. Это уменьшает количество ошибок.
- Кэширование: Такие объекты можно безопасно использовать в качестве ключей в
Map или элементов в Set, поскольку их хэш-код и равенство (определяемое методом equals) не меняются.
- Безопасность: Использование неизменяемых объектов предотвращает нежелательные побочные эффекты, когда один участок кода модифицирует объект, который используется в другом участке кода.
- Совместное использование: Несколько ссылок могут указывать на один и тот же неизменяемый объект без риска изменения состояния.
Пример:
java
Если класс содержит изменяемые объекты в качестве полей, для обеспечения иммутабельности необходимо делать их копии при передаче в конструктор и при возврате через геттеры (deep copy).