在设计一个小型API时,我打算写一个静态值,它引用了一个字符串数组:
public static final String[] KEYS={"a","b","c"}
。我发现这在Joshua Bloch的《Effective Java》第14条中被标记为“安全漏洞”。他提出了一种替代方案,即声明该数组为“private”,并提供一个公共getter,返回一个不可修改的列表:return Collections.unmodifiableList(Arrays.asList(KEYS))
我不明白为什么需要这样做,初始语句中的数组虽然是公共的,但已经声明为final,而且它的元素也是不可变的,如何能从外部代码修改它呢?
final
,所以我点了赞,似乎很多人不理解这个关键字。 - Manu