Чтобы сделать класс неизменяемым, вам нужно убедиться, что все поля в нем являются окончательными, и что типы этих полей тоже неизменны.
Это может быть неприятно помнить, но есть инструмент, который поможет вам.
Pure4J предоставляет аннотацию @ImmutableValue
, которую можно добавить в интерфейс или класс.
Существует плагин maven, который во время компиляции проверяет, соблюдаете ли вы следующие правила неизменности.
Надеюсь, это поможет.