一、不可变的私有数组常量
数组常量常使用"私有数组常量+公有克隆方法"的解决方案:定义一个私有数组常量,保证不会被外部类使用;在定义一个获取数组常量方法,并返回一个数组常量的克隆值。
/** 常量值数组 */
private static final int[] CONST_VALUES = new int[] {1, 2, 3};
/** 获取常量值数组方法 */
public static int[] getConstValues() {
return CONST_VALUES.clone();
}
二、集合常量
直接定义static final只能使集合引用不可变,但是还是可以往集合中添加元素,所以可以利用Collections提供的方法,把可变集合对象变为不可变(不可修改,修改时会抛出UnsupportedOperationException异常)
/** 常量值列表 */
public static final List<Integer> CONST_VALUE_LIST = Collections.unmodifiableList(Arrays.asList(1, 2, 3));
/** 常量值集合 */
public static final Set<Integer> CONST_VALUE_SET = Collections.unmodifiableSet(new HashSet<>(Arrays.asList(1, 2, 3)));
/** 常量值映射 */
public static final Map<Integer, String> CONST_VALUE_MAP;
static {
Map<Integer, String> valueMap = new HashMap<>();
valueMap.put(1, "value1");
valueMap.put(2, "value2");
valueMap.put(3, "value3");
CONST_VALUE_MAP = Collections.unmodifiableMap(valueMap);
}