Неизменяемость состояния объекта после его создания. Для иммутабельных объектов нет методов, изменяющих внутреннее состояние. Любая операция, которая могла бы его модифицировать, вместо этого возвращает новый объект с измененным состоянием.
Основные свойства иммутабельных классов в Java:
- Все поля помечены как
final
.
- Класс помечен как
final
(или все конструкторы приватные с фабричными методами).
- Для полей примитивных типов их значение устанавливается в конструкторе и не меняется.
- Для полей ссылочных типов их значение также устанавливается в конструкторе. Mutator-методы (setters) отсутствуют. Если поле является ссылкой на изменяемый объект, при создании или возврате его копируется (глубокое копирование, если необходимо).
Преимущества иммутабельности:
- Потокобезопасность: Иммутабельные объекты автоматически потокобезопасны, так как их состояние не может меняться, устраняя проблемы синхронизации.
- Простота: Состояние объекта предсказуемо, что упрощает отладку и понимание кода.
- Кеширование: Так как состояние не меняется, можно безопасно кешировать значение хэш-кода.
- Безопасность: Изменяемые объекты могу
Неизменяемость состояния объекта после его создания. Для иммутабельных объектов нет методов, изменяющих внутреннее состояние. Любая операция, которая могла бы его модифицировать, вместо этого возвращает новый объект с измененным состоянием.
Основные свойства иммутабельных классов в Java:
- Все поля помечены как
final
.
- Класс помечен как
final
(или все конструкторы приватные с фабричными методами).
- Для полей примитивных типов их значение устанавливается в конструкторе и не меняется.
- Для полей ссылочных типов их значение также устанавливается в конструкторе. Mutator-методы (setters) отсутствуют. Если поле является ссылкой на изменяемый объект, при создании или возврате его копируется (глубокое копирование, если необходимо).
Преимущества иммутабельности:
- Потокобезопасность: Иммутабельные объекты автоматически потокобезопасны, так как их состояние не может меняться, устраняя проблемы синхронизации.
- Простота: Состояние объекта предсказуемо, что упрощает отладку и понимание кода.
- Кеширование: Так как состояние не меняется, можно безопасно кешировать значение хэш-кода.
- Безопасность: Изменяемые объекты могу