Короткий ответ: final
помогает маленькому биту, но ... вместо этого используйте защитное программирование на стороне клиента.
Действительно, проблема с final
в том, что она только обеспечивает, чтобы ссылка не изменялась , радостно позволяя связанным объектам-объектам быть мутированными, без ведома вызывающего. Следовательно, наилучшей практикой в этом отношении является защитное программирование со стороны вызывающего абонента, создающее глубоко неизменные экземпляры или глубокие копии объектов, которым грозит опасность недобросовестных API.