Мне сказали, что я неправильно понимаю эффекты final
. Каковы эффекты ключевого слова final
?
Вот краткий обзор того, что я думаю, я знаю:
Модификатор Java окончательный (так называемое отношение агрегации)
примитивные переменные: можно установить только один раз. (память и производительность прибыль)
переменные объектов: могут быть изменены, окончательное относится к объекту ссылка.
поля: можно установить только один раз.
методы: нельзя переопределить, скрывать.
классы: невозможно продлить.
сбор мусора: заставит сборку мусора для генерации Java mark-sweep для двойной развертки.
Can и Cant
- Может сделать клон неудачным (это хорошо и плохо)
- Может создавать неизменяемые примитивы aka const
- Может сделать пустой неизменный - инициализирован при создании aka readonly
- Может сделать объекты неграмотными неизменными
- Может сделать видимость видимости/видимость неизменной
- Могут ли уменьшить накладные расходы на вызов метода (поскольку ему не нужна виртуальная таблица)
- Может использовать аргументы метода как окончательные (даже если у вас нет)
- Может сделать объекты потокобезопасными (если объект определен как final, он не сделает окончательные аргументы метода)
- Можете сделать макетные тесты (не то, чтобы вы могли что-то с этим сделать), вы можете сказать, что есть ошибки)
- Невозможно подружиться (переменимо с другими друзьями и неизменным для отдыха)
- Невозможно сделать mutable, который будет изменен, чтобы быть неизменным позже (но может с шаблоном factory как исправление)
- Невозможно сделать элементы массива неизменяемыми, ака глубоко неизменяемыми.
- Невозможно создать новые экземпляры объекта (это хорошо и плохо)
- Невозможно выполнить сериализацию.
Нет альтернатив final
, но есть оболочка + private и перечисления.