• 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());
    
        }
    
    
    
    }



  • 相关阅读:
    Spring Bean 生命周期
    Spring中如何动态注入Bean实例教程
    你真的会学习吗——教你如何学习《如何高效学习》
    零基础报考软件设计师的经验教训
    UDP的优点
    科二科三练车,必须明白的10个基础
    怎样查看光驱硬盘托架的尺寸
    Scala具体解释---------Scala是什么?可伸展的语言!
    LeetCode Plus One
    LicManager系统对各license类型终端客户机器的监控
  • 原文地址:https://www.cnblogs.com/hanjun0612/p/9779804.html
Copyright © 2020-2023  润新知