之前写过一篇 判断一个枚举值是否属于某个枚举类 ,后来发现我们在实际的项目开发中常常会用到枚举类,而且还会用到一些其他的方法,所以,如下所示,我补充几个小方法以备后用!这些是我在项目中用到过的一些方法,肯定还有别的,反正写起来也比较简单,知道个思路就ok了(核心:枚举值的遍历)!
import java.util.*; /** * @Description: 控制开关的状态 * @since: JDK 1.7 * @Version: V1.0 */ public enum SwitchStatusEnum { CLOSE(0, "0-关闭"), OPEN(1, "1-开启"); private int key; private String value; SwitchStatusEnum() { } private SwitchStatusEnum(int key, String value) { this.key = key; this.value = value; } public void setKey(int key) { this.key = key; } public void setValue(String value) { this.value = value; } public int getKey() { return key; } public String getValue() { return value; } /** * 枚举类值的长度 */ public static int ENUM_VALUE_LENGTH = SwitchStatusEnum.values().length; /** * 判断枚举类的key是否属于枚举类 */ public static boolean keyIsExist(int key){ boolean include = false; for (SwitchStatusEnum e: SwitchStatusEnum.values()){ if(e.getKey()==key){ include = true; break; } } return include; } /** * 判断枚举类的value是否属于枚举类 */ public static boolean valueIsExist(String value){ boolean include = false; for (SwitchStatusEnum e: SwitchStatusEnum.values()){ if(e.getValue().equals(value)){ include = true; break; } } return include; } /** * 通过枚举key获取枚举对象 */ public static SwitchStatusEnum getEnumObjByKey(int key){ SwitchStatusEnum eo = null; for (SwitchStatusEnum e: SwitchStatusEnum.values()){ if(e.getKey()==key){ eo = e; break; } } return eo; } /** * 通过枚举value获取枚举对象 */ public static SwitchStatusEnum getEnumObjByValue(String value){ SwitchStatusEnum eo = null; for (SwitchStatusEnum e: SwitchStatusEnum.values()){ if(e.getValue().equals(value)){ eo = e; break; } } return eo; } /** * 将枚举值转换为Map */ public static Map<Integer,Object> getMapByEnum(){ Map<Integer,Object> map = new HashMap<Integer,Object>(ENUM_VALUE_LENGTH); for (SwitchStatusEnum e: SwitchStatusEnum.values()){ map.put(e.getKey(),e.getValue()); } return map; } /** * 将枚举类的key转换为Set */ public static Set<Integer> getEnumKeySet(){ Set<Integer> set = new HashSet<Integer>(ENUM_VALUE_LENGTH); for (SwitchStatusEnum e: SwitchStatusEnum.values()){ set.add(e.getKey()); } return set; } /** * 将枚举类的value转换为Set */ public static Set<String> getEnumValueSet(){ Set<String> set = new HashSet<String>(ENUM_VALUE_LENGTH); for (SwitchStatusEnum e: SwitchStatusEnum.values()){ set.add(e.getValue()); } return set; } /** * 将枚举值转换为list */ public static List<Map<String,Object>> getListByEnum(){ List<Map<String,Object>> list = new ArrayList<Map<String, Object>>(ENUM_VALUE_LENGTH); for (SwitchStatusEnum e: SwitchStatusEnum.values()){ Map<String,Object> map = new HashMap<String,Object>(); map.put("key",e.getKey()); map.put("value",e.getValue()); list.add(map); } return list; } @Override public String toString() { return "SwitchStatusEnum{" + "key=" + key + ", value='" + value + '\'' + '}'; } }
小结:
我感觉用枚举类可以基本代替一些类型固定且简单的码表来用,对于需要维护可能会变化的有些不太适用,但是也勉强可以用。用它最核心的诉求在于,维持数据的统一性降低编码的出错概率,提升代码的易读性,通过value值也能比较清楚的知道对应的枚举值的确切含义、作用、功能等等。总之,是出于代码的易读性、易维护性、统一性、健壮性来使用的。
鉴于水平有限难保不会出现错漏之处,如果你觉得那里有错误,请点击一下“反对”按钮,并希望您提出宝贵的修改意见,您的宝贵意见将是我们进步的一大源泉!
如果您觉得阅读上文对您有所帮助,请轻点一下“推荐”按钮,您的“推荐”将是我最大的写作动力!