§15 Минимизируйте mutability
Признаки immunable класса Не создавайте методов, способных изменить состояние объекта (mutators) Убедитесь, что от класса нельзя отнаследоваться. Делайте все поля final Делайте все поля private Убеждайтесь в эксклюзивности доступа ко всем mutable полям
Пример
Immunable объекты просты Immunable объекты потомственно thread-safe, не требуют синхронизации Также, они могут свободно share Не следует имплементировать clone() или конструктор копирования в таких объектах. Не только вы можете share immunable объекты. Вы можете share их внутренние поля. Immunable объекты очень удобны при создании других объектов
Единственный недостаток immunable объектов, это то, что для каждого нового значения вам необходим новый экземпляр. –BitSet vs BigInteger и метод flipBit() Поэтому существуют mutable компаньоны (String и StringBuilder)
Иной подход: Это позволяет расширять так:
Не всегда понимают что immunable класс должен быть final, и это может привести к плохим последствиям Поэтому: Классы следует создавать immutable до тех пор пока у вас нет веских причин сделать наоборот.
Если класс не может быть immutable, ограничьте его изменяемость как только это возможно Делайте каждое поле final, пока нет достаточной причины сделать не так. Пример: TimerTask, java.util.Date, java.awt.Point