static final类型的数组
在某些情况下我们需要一个常量数组来保存一些不变的值,但是单纯的将数组声明成static final类型可以实现吗?事实上,类具有共有的静态final数组域,或者返回这种域的访问方法,这几乎总是错误的。如果类具有这样的域或者访问方法,客户端将能够修改数组中的内容。
解决方案一:使公有数组变成私有的,并增加一个公有的不可变列表
private static final String[] PRIVATE_VALUES = {"zhangsan", "lisi"};
public static final List<String> VALUES = Collections.unmodifiableList(Arrays.asList(PRIVATE_VALUES));
如果客户端想修改这个数组的话,就会抛出UnsupportedOperationException异常。
解决方案二:将数组变成私有的,并添加一个公有方法,它返回私有数组的一个备份
private static final String[] PRIVATE_VALUES = {"zhangsan", "lisi"};
public static final String[] values() {
return PRIVATE_VALUES.clone();
}
这样,在客户端只是获取了原数组的一份拷贝,客户端修改这个拷贝数组不会对原数组产生影响。