在设计一个小API的时候,我正准备编写一个引用String数组的静态值:
public static final String[] KEYS={"a","b","c"}
我发现在Joshua Bloch的"Effective Java"第14项中将其标记为"安全漏洞",他建议将其作为替代方案,声明te array'private'并提供返回不可修改列表的公共getter:
return Collections.unmodifiableList(Arrays.asList(KEYS))
我只是不明白为什么这是必要的,初始语句中的数组被声明为final,即使它是公共的,它的元素是不可变的,如何从外部代码修改?
该数组不是不可变的.
你仍然可以写:
KEYS[0] = "d";
没有任何问题.
final
只是意味着你不能写:
KEYS = new String[]{"d"};
即,您无法为变量分配新值KEYS
.