java 枚举 封装操作方法

前言: 

由于刚转java项目,所以对于java语言比较陌生,尤其是lambda和一些诸如(一个java文件只能有一个public class)等等的零散知识点之类。。。

使我觉得就语言的层级来说。.net真的超越java不是一星半点。奈何.net跨平台晚,社区力量也小。

相交枚举而言。真的没有 .net中给枚举添加attrbuite来的方便。.net枚举:http://blog.csdn.net/hanjun0612/article/details/70807664

由于公司需要多语言,所以枚举中希望能增添额外的属性。
并且提供共同的操作方法。

下面给大家看一下java中的枚举操作方法的封装。(由于是java的菜鸡,所以将就着用)

先看一下文件结构

然后我们看一下各个文件:

一:EnumItem

封装了一些常用属性,属性命名很直白了,就不解释了

(这里key设置了泛型,是由于特殊情况不需要Integer类型)

public class EnumItem<T> {
 
    private T itemKey;
    private String itemValue;
    private String itemCN;
    private String itemEN;
 
    public EnumItem(){}
 
    public T getItemKey() {
        return itemKey;
    }
 
    public void setItemKey(T itemKey) {
        this.itemKey = itemKey;
    }
 
    public String getItemValue() {
        return itemValue;
    }
 
    public void setItemValue(String itemValue) {
        this.itemValue = itemValue;
    }
 
    public String getItemCN() {
        return itemCN;
    }
 
    public void setItemCN(String itemCN) {
        this.itemCN = itemCN;
    }
 
    public String getItemEN() {
        return itemEN;
    }
 
    public void setItemEN(String itemEN) {
        this.itemEN = itemEN;
    }
}

二  EnumList 

存放枚举值,每个枚举都继承了IEnumList接口,并且重写了getEnumItem()方法。

不知道接口能不能通过 default来默认实现。大家可以尝试一下。

public class EnumList{
    public interface IEnumList {
        EnumItem getEnumItem();
    }
 
 
    //region SexEnum
    public enum SexEnum implements IEnumList  {
        WOMAN(0, "女","F","0"),
        MAN(1, "男","M","1");
 
        private EnumItem item=new EnumItem();
 
        SexEnum(Integer itemKey,String itemCN,String itemEN,String itemValue) {
            item.setItemKey(itemKey);
            item.setItemCN(itemCN);
            item.setItemEN(itemEN);
            item.setItemValue(itemValue);
 
        }
 
        @Override
        public EnumItem<Integer> getEnumItem() {
            return item;
        }
    }
    //endregion
 
    //region IsDeleteEnum
    public enum IsDeleteEnum implements IEnumList  {
        No(0d, "否","No","0"),
        Yes(1.3d, "是","Yes","1.3");
 
        private EnumItem item=new EnumItem();
 
        IsDeleteEnum(Double itemKey,String itemCN,String itemEN,String itemValue) {
            item.setItemKey(itemKey);
            item.setItemCN(itemCN);
            item.setItemEN(itemEN);
            item.setItemValue(itemValue);
 
        }
 
        @Override
        public EnumItem<Double> getEnumItem() {
            return item;
        }
    }
    //endregion
}

三  EnumHelper

重头戏,注释比较简单,大家应该明白的。

public class EnumHelper {
 
    /**
     * 获取枚举集合
     *
     * Enum
     * 
     * @param <T>
     * @return List<EnumItem>
     */
    public static <T extends EnumList.IEnumList> List<EnumItem> getEnumList(
            Class<? extends EnumList.IEnumList> enumClass) {
        T[] q = (T[]) enumClass.getEnumConstants();
        List<EnumItem> v = Arrays.stream(q).map(T::getEnumItem).collect(Collectors.toList());
        return v;
    }
 
    
    /**
     * 根据枚举类型和key获取信息
     * 
     * @param enumClass
     *            Enum
     * @param key
     *            Enum key
     * @param <T>
     * @return EnumItem
     */
    public static <T extends EnumList.IEnumList> EnumItem getEnumItem(Class<? extends EnumList.IEnumList> enumClass,
            Integer key) {
        T[] q = (T[]) enumClass.getEnumConstants();
        Optional<T> v = (Arrays.stream(q)).filter(x -> x.getEnumItem().getItemKey() == key).findFirst();
        if (v.equals(Optional.empty()))
            return null;
        T r = v.get();
        EnumItem s = r.getEnumItem();
        return s;
    }
 
    /**
     * 根据枚举类型和value获取信息
     * 
     * @param enumClass
     *            Enum
     * @param value
     *            Enum value
     * @param <T>
     * @return EnumItem
     */
    public static <T extends EnumList.IEnumList> EnumItem getEnumItem(Class<? extends EnumList.IEnumList> enumClass,
            String value) {
        T[] q = (T[]) enumClass.getEnumConstants();
        Optional<T> v = (Arrays.stream(q)).filter(x -> x.getEnumItem().getItemValue() == value).findFirst();
        if (v.equals(Optional.empty()))
            return null;
        T r = v.get();
        EnumItem s = r.getEnumItem();
        return s;
    }
}

四  TestApplication

测试运行

public class TestApplication {
    public static void main(String[] args) {
        //直接通过枚举值来获取信息
        EnumItem q = EnumList.SexEnum.WOMAN.getEnumItem();
        System.out.println(q.getItemEN());

        //获取Sex枚举信息
        List<EnumItem> s = EnumHelper.getEnumList(EnumList.SexEnum.class);
        System.out.println(s.get(0).getItemCN());
        System.out.println(s);

        //根据枚举类型 和 key 获取此枚举信息
        EnumItem v = EnumHelper.getEnumItem(EnumList.SexEnum.class,1);
        System.out.println(v.getItemEN());

    }



}



原文地址:https://www.cnblogs.com/hanjun0612/p/9779804.html