Enum 修复findbugs问题记录一则,List想表示不可变集合

来源:互联网 发布:168信息数据 编辑:程序博客网 时间:2024/06/06 15:36

问题描述:目前业务中可能对某些参数只支持某些固定的字符串,比如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)开放出去的真正的不可变,多一行搞定

0 0
原创粉丝点击