/** * 模板枚举 */ 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 = get(index); return e==null?"":e.getName(); } /** * 通过index获取对应的枚举 * @param index * @return */ public static ColorEnum get(Integer index) { return (ColorEnum) map.get(index); } }
这是自用的一种java枚举类的形式,使用map将枚举缓存起来(饿汉模式),方便直接用index来获取对应的枚举以及相关的一些值。
还有另外一种做法是在通过index获取对应枚举的时候,进行遍历枚举的values(懒汉模式),我自己不是很喜欢这么干,感觉每通过index获取一次枚举都要遍历一次values有点浪费资源的感觉,还不如直接用一个map缓存起来。多加一个map应该也消耗不了多少内存(这点我没有进行求证)。