godtrue

之前写过一篇 判断一个枚举值是否属于某个枚举类 ,后来发现我们在实际的项目开发中常常会用到枚举类,而且还会用到一些其他的方法,所以,如下所示,我补充几个小方法以备后用!这些是我在项目中用到过的一些方法,肯定还有别的,反正写起来也比较简单,知道个思路就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值也能比较清楚的知道对应的枚举值的确切含义、作用、功能等等。总之,是出于代码的易读性、易维护性、统一性、健壮性来使用的。

 

posted on 2017-10-15 21:23  godtrue  阅读(549)  评论(0编辑  收藏  举报