问题描述:目前业务中可能对某些参数只支持某些固定的字符串,比如dot/cat,最初的实现很简单朴素
private static final List<String> SUPPORT_ANIMAL = Arrays.asList("dog","cat","bear");
用的时候直接判断SUPPORT_ANIMAL.contains(xx); 其实能够表示这些是一个整体
问题在于,这个List别人可以随便修改,虽然List保证了是集合,但是static和final也保证不了集合的不可变性(因为内存保存的关系,这只能保证集合的引用不改变);
问题解决:用Enum替代,用enum自带的static和final特性
enum Animal1
{
dog, cat, bear;
private static EnumSet<Animal1> set = EnumSet.allOf(Animal1.class);
public static boolean contains(String args)
{
try
{
return set.contains(valueOf(args));
}
catch (Exception e)
{
return false;
}
}
}
2.23补充,最终由于Enum修改代码较长,最终改为private static final一个变量的temp,再public static final List<String> xx= Collections.unmodifiableList(temp)开放出去的真正的不可变,多一行搞定