При проектировании небольшого API я собирался написать статическое значение, которое ссылается на массив String: public static final String[] KEYS={"a","b","c"}
Я нашел, что это обозначено как «дыра безопасности» в Joshua Bloch's пункт «Effective Java» 14, где он предлагает в качестве альтернативы, объявить тэ массив «частный» и обеспечить общественный поглотитель, который возвращает неизменяемый список:Изменение публичного статического окончательного массива
return Collections.unmodifiableList(Arrays.asList(KEYS))
Я просто не могу понять, почему это было бы необходимо, массив в исходном заявлении объявляется окончательным, даже несмотря на то, что его публикация и ее элементы неизменяемы, как это можно изменить из внешней части кода?
Упрощенный для объяснения 'final', похоже, что многие люди не понимают этого ключевого слова. – Manu