自用java枚举类模板

内容已迁移至:http://www.3kkg.com/1013

------------------------

/**
 * 模板枚举
 */
public enum ColorEnum {

    /**
     *
     */
    RED(1, "红色"),
    GREEN(2, "绿色"),
    YELLOW(3, "黄色");

    private final Integer index;
    private final String name;

    ColorEnum(Integer index, String name) {
        this.index = index;
        this.name = name;
    }

    public Integer getIndex() {
        return index;
    }

    public String getName() {
        return name;
    }

    private static Map<Integer, Object> map = new HashMap<Integer, Object>();

    static {
        //初始化的时候将枚举缓存到一个map中,方便直接通过index获取对应的枚举
        for (ColorEnum e : ColorEnum.values()) {
            map.put(e.getIndex(), e);
        }
    }

    /**
     * 通过index获取对应的name
     * 如果index为null或者不是有效的index,返回空字符串
     * 否则返回正常对应的值
     * @param index
     * @return
     */
    public static String getName(Integer index) {
        ColorEnum e = (ColorEnum) map.get(index);
        if (e == null) {
            return "";
        } else {
            return e.getName();
        }
    }

    /**
     * 测试,使用时可以删除
     *
     * @param args
     */
    public static void main(String[] args) {
        System.out.println("异常情况返回空字符串:" + ColorEnum.getName(null));
        System.out.println("异常情况返回空字符串:" + ColorEnum.getName(0));
        System.out.println("正常情况:" + ColorEnum.getName(1));
    }

}

这是自用的一种java枚举类的形式,使用map将枚举缓存起来,方便使用index来获取对应的枚举以及相关的一些值。

还有另外一种做法是在通过index获取对应枚举的时候,进行遍历枚举的values,我自己不是很喜欢这么干,感觉每通过index获取一次枚举都要遍历一次values有点浪费资源的感觉,还不如直接用一个map缓存起来。多加一个map应该也消耗不了多少内存(这点我没有进行求证)。