final запрещает наследование от класса и переопределение его поведения. Для кеша это помогает сохранить инварианты, но не делает доступ потокобезопасным.
Почему используют финальный класс вместо класса для реализации кэша?
final запрещает наследование от класса и переопределение его поведения. Для кеша это помогает сохранить инварианты, но не делает доступ потокобезопасным.
Короткий ответ
Что ответить на собеседовании
Подробный разбор
Ответ с пояснениями
final запрещает наследование от класса и переопределение его поведения. Для кеша это помогает сохранить инварианты, но не делает доступ потокобезопасным.
Если расширение через подклассы не является частью контракта, final показывает это намерение и уменьшает число способов случайно нарушить TTL, вытеснение или синхронизацию. Подмену в тестах можно делать через CacheProtocol, не наследуясь от реализации.
Компилятор в некоторых случаях лучше оптимизирует вызовы, но обещать измеримый выигрыш без профилирования не стоит. Для конкурентного кеша всё равно нужны actor, lock или другая изоляция; final относится к наследованию, а не к согласованности памяти.
Источник: raw.githubusercontent.com.