Ответ
Изменяемые (mutable) объекты позволяют модифицировать своё внутреннее состояние после создания.
Основные сценарии использования:
- Производительность: Избегание накладных расходов на создание новых объектов при частом изменении состояния (например, изменение координат объекта в игровом цикле).
- Моделирование сущностей с изменяемым состоянием: Банковский счёт, корзина покупок, конфигурация.
- Сложные структуры данных: Большинство стандартных коллекций (
ArrayList,HashMap) являются mutable для эффективных операций добавления/удаления.
Пример mutable класса:
public class MutableAccount {
private double balance;
public void deposit(double amount) {
if (amount > 0) {
this.balance += amount;
}
}
// Геттер для balance
}
Недостатки и риски:
- Сложность в многопоточности: Требует синхронизации для обеспечения потокобезопасности.
- Непредсказуемость: Передача mutable объекта по ссылке позволяет неожиданно изменить его состояние в другой части программы.
Рекомендация: Используйте immutable объекты по умолчанию и переходите к mutable только при явной необходимости, обусловленной производительностью или предметной областью.