zoukankan      html  css  js  c++  java
  • 枚举的使用方法[自己总结]

    最简单的枚举使用方式:

    /**
     * 季节枚举类
     * Created by SYJ on 2017/5/1.
     */
    public enum SeasonEnum {
        SPRING, SUMMER, AUTUMN, WINTER
    }

    用法举例:

    /**
     * Created by SYJ on 2017/4/30.
     */
    public class AppTest {
        public static void main(String[] args) {
            SeasonEnum spring = SeasonEnum.SPRING;
            //输出:  SPRING这个枚举值的名称为:    SPRING
            System.out.println("SPRING这个枚举值的名称为:	" + spring.name());
        }
    }

    有构造方法的枚举类(构造方法有一个参数),下面是比较常用的一种方式:

    /**
     * 任务状态枚举类
     * Created by SYJ on 2017/4/27.
     */
    public enum TaskStatusEnum {
    
        NotStart(0),    //未开始
        Doing(1),       //执行中
        Pause(2),       //暂停
        Completed(3),   //已完成
        Del(4),         //删除
        CutShort(5) ;   //提前结束
    
        private int value;
        TaskStatusEnum(int value) {
            this.value=value;
        }
        public  int getValue(){
            return  value;
        }
    
        /**
         * 根据value返回对应的枚举值
         * @param value
         * @return
         */
        public static TaskStatusEnum valueOf(int value) {
            switch (value) {
                case 0: return NotStart;
                case 1: return Doing;
                case 2: return Pause;
                case 3: return Completed;
                case 4: return Del;
                case 5: return CutShort;
                default: return null;
            }
        }
    }

    订单状态枚举类:

    /**
     * 订单状体枚举类
     * Created by SYJ on 2017/5/1.
     */
    public enum OrderStatus {
        
        WaitPay(0), //等待支付
        Paid(1),    //已经支付
        Expired(2), //已经失效
        Force(3);   //已经生效
    
        private int value;
        OrderStatus(int value) {
            this.value=value;
        }
        public  int getValue(){
            return  value;
        }
    
        public static OrderStatus valueOf(int value) {
            switch (value) {
                case 0:
                    return WaitPay;
                case 1:
                    return Paid;
                case 2:
                    return Expired;
                case 3:
                    return Force;
                default:
                    return null;
            }
        }
    }

    消息状态枚举类:

    /**
     * 消息状态枚举类
     * Created by SYJ on 2017/5/1.
     */
    public enum MessageStatus {
        
        Read(1),//已读
        UnRead(0);//未读
    
        private int value;
        MessageStatus(int value) {
            this.value=value;
        }
        public  int getValue(){
            return  value;
        }
    
        public static MessageStatus valueOf(int value) {
            switch (value) {
                case 1:
                    return Read;
                case 0:
                    return UnRead;
                default:
                    return null;
            }
        }
    }

    月份的枚举类:

    /**
     * 月份枚举类
     * Created by SYJ on 2017/5/1.
     */
    public enum MonthEnum {
    
        Jan(1),
        Feb(2),
        Mar(3),
        Apr(4),
        May(5),
        Jun(6),
        Jul(7),
        Aug(8),
        Sep(9),
        Oct(10),
        Nov(11),
        Dec(12);
    
        private Integer index;
    
        public Integer getIndex() {
            return index;
        }
    
        MonthEnum(Integer index) {
            this.index = index;
        }
    
        /**
         * 根据索引获取对应的枚举对象
         * @param index
         * @return
         */
        public static MonthEnum getEnumTypeByIndex(Integer index) {
            MonthEnum[] values = MonthEnum.values();
            for (MonthEnum value : values) {
                if (value.getIndex() == index) {
                    return value;
                }
            }
            return null;
        }
    }

    用法举例:

    /**
     * Created by SYJ on 2017/4/30.
     */
    public class AppTest {
        public static void main(String[] args) {
            Integer index = MonthEnum.Apr.getIndex();
            //输出:  Apr这个枚举值对应的索引为:    4
            System.out.println("Apr这个枚举值对应的索引为:	" + index);
            
            //输出:  索引4对应的枚举值为:    Apr
            MonthEnum monthEnum = MonthEnum.getEnumTypeByIndex(4);
            System.out.println("索引4对应的枚举值为:	" + monthEnum.name());
        }
    }

    注意:

      枚举中的所有构造方法都必须是private修饰,如果不加任何修饰符,默认就是private修饰。

      枚举类中定义的工具方法getEnumTypeByIndex()使用static修饰,这样才能通过MonthEnum.getEnumTypeByIndex(4)的方式来调用。

    枚举类的构造方法有两个参数的情况:

    import java.util.HashMap;
    import java.util.Map;
    
    /**
     * 星期枚举类
     * Created by SYJ on 2017/5/1.
     */
    public enum WeekDayEnum {
        SUN(0, "星期日"),
        MON(1, "星期一"),
        TUE(2, "星期二"),
        WED(3, "星期三"),
        THUR(4, "星期四"),
        FRI(5, "星期五"),
        SAT(6, "星期六");
    
        private Integer index;
        private String key;
    
        WeekDayEnum(Integer index, String key) {
            this.index = index;
            this.key = key;
        }
    
        public String getKey() {
            return key;
        }
    
        public Integer getIndex() {
            return index;
        }
    
        /**
         * 根据枚举名称得到key
         * 比如根据"WED"得到"星期三"
         * @param name
         * @return
         */
        public static String getKeyByName(String name) {
            WeekDayEnum[] values = WeekDayEnum.values();
            for (WeekDayEnum value : values) {
                if (value.name().equals(name)) {
                    return value.getKey();
                }
            }
            return null;
        }
    
        /**
         * 根据属性key获取属性index:
         * 比如根据 "星期三" 得到 3
         * @param key
         * @return
         */
        public static Integer getIndexByKey(String key) {
            for (WeekDayEnum weekDayEnum : WeekDayEnum.values()) {
                String k = weekDayEnum.getKey();
                if (k.equals(key)) {
                    return weekDayEnum.getIndex();
                }
            }
            return null;
        }
    
        /**
         * 根据属性index获取属性key:
         * 比如根据 3 得到 "星期三"
         * @param index
         * @return
         */
        public static String getKeyByIndex(Integer index) {
            for (WeekDayEnum weekDayEnum : WeekDayEnum.values()) {
                Integer in = weekDayEnum.getIndex();
                if (in == index) {
                    return weekDayEnum.getKey();
                }
            }
            return null;
        }
    
        /**
         * 根据属性index获取对应的枚举值:
         * 比如根据 3 得到枚举值 WED
         * @param index
         * @return
         */
        public static WeekDayEnum getTypeByIndex(Integer index) {
            for (WeekDayEnum value : WeekDayEnum.values()) {
                if (value.getIndex() == index) {
                    return value;
                }
            }
            return null;
        }
    
        /**
         * 返回一个由index和key组成的map集合:
         * {0=星期日, 1=星期一, 2=星期二, 3=星期三, 4=星期四, 5=星期五, 6=星期六}
         * @return
         */
        public static Map<Integer, String> getIndexKeyMap() {
            Map<Integer, String> map = new HashMap<>();
            for (WeekDayEnum value : WeekDayEnum.values()) {
                Integer index = value.getIndex();
                String key = value.getKey();
                map.put(index, key);
            }
            return map;
        }
    }

    用法举例:

    import java.util.Map;
    
    /**
     * Created by SYJ on 2017/4/30.
     */
    public class AppTest {
        public static void main(String[] args) {
            Integer index = WeekDayEnum.getIndexByKey("星期日");
            System.out.println(index);//输出 0
    
            String key = WeekDayEnum.getKeyByIndex(0);
            System.out.println(key);//输出 星期日
    
            String keyByName = WeekDayEnum.getKeyByName("SAT");
            System.out.println(keyByName);//输出 星期六
    
            Map<Integer, String> map = WeekDayEnum.getIndexKeyMap();
            //输出  {0=星期日, 1=星期一, 2=星期二, 3=星期三, 4=星期四, 5=星期五, 6=星期六}
            System.out.println(map);
        }
    }

    构造方法的参数有多个情况:

    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * Created by SYJ on 2017/5/1.
     */
    public enum WeekDayEnumX {
        SUN(0, "星期日", "Sunday"),
        MON(1, "星期一", "Monday"),
        TUE(2, "星期二", "Tuesday"),
        WED(3, "星期三", "Wednesday"),
        THUR(4, "星期四", "Thursday"),
        FRI(5, "星期五", "Friday"),
        SAT(6, "星期六", "Saturday");
    
        private Integer index;//索引
        private String cn;//中文表示
        private String en;//英文表示
    
        WeekDayEnumX(Integer index, String cn, String en) {
            this.index = index;
            this.cn = cn;
            this.en = en;
        }
    
        public static String getCnByIndex(Integer index) {
            WeekDayEnumX[] values = WeekDayEnumX.values();
            for (WeekDayEnumX value : values) {
                if (value.index == index) {
                    return value.cn;
                }
            }
            return null;
        }
    
        public static String getEnByIndex(Integer index) {
            WeekDayEnumX[] values = WeekDayEnumX.values();
            for (WeekDayEnumX value : values) {
                if (value.index == index) {
                    return value.en;
                }
            }
            return null;
        }
    
        /**
         * 获取所有的索引list
         * @return
         */
        public static List<Object> getAllIndex() {
            List<Object> list = new ArrayList<>();
            WeekDayEnumX[] values = WeekDayEnumX.values();
            for (WeekDayEnumX value : values) {
                list.add(value.index);
            }
            return list;
        }
    
        /**
         * 将枚举值中的所有属性封装到一个list集合中
         * @return
         */
        public static List<List<Object>> getAll() {
            List<List<Object>> lists = new ArrayList<>();
            WeekDayEnumX[] values = WeekDayEnumX.values();
            for (WeekDayEnumX value : values) {
                List<Object> elementList = new ArrayList<>();
    
                elementList.add(value.name());
                elementList.add(value.index);
                elementList.add(value.cn);
                elementList.add(value.en);
    
                lists.add(elementList);
            }
    
            return lists;
        }
    }

    用法举例:

    import java.util.List;
    
    /**
     * Created by SYJ on 2017/4/30.
     */
    public class AppTest {
        public static void main(String[] args) {
            List<Object> allIndex = WeekDayEnumX.getAllIndex();
            System.out.println(allIndex);//输出 [0, 1, 2, 3, 4, 5, 6]
    
            List<List<Object>> allList = WeekDayEnumX.getAll();
            for (List<Object> list : allList) {
                /**
                 * 输出结果:
                 * 
                 * [SUN, 0, 星期日, Sunday]
                 * [MON, 1, 星期一, Monday]
                 * [TUE, 2, 星期二, Tuesday]
                 * [WED, 3, 星期三, Wednesday]
                 * [THUR, 4, 星期四, Thursday]
                 * [FRI, 5, 星期五, Friday]
                 * [SAT, 6, 星期六, Saturday]
                 */
                System.out.println(list);
            }
        }
    }

    带有抽象方法的枚举类:

    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    /**
     * Created by SYJ on 2017/5/1.
     */
    public enum WeekDayEM {
        SUN {
            @Override
            public Integer getValue() {
                return 0;
            }
    
            @Override
            public String getKey() {
                return "星期日";
            }
        },
        MON {
            @Override
            public Integer getValue() {
                return 1;
            }
    
            @Override
            public String getKey() {
                return "星期一";
            }
        },
        TUE {
            @Override
            public Integer getValue() {
                return 2;
            }
    
            @Override
            public String getKey() {
                return "星期二";
            }
        },
        WED {
            @Override
            public Integer getValue() {
                return 3;
            }
    
            @Override
            public String getKey() {
                return "星期三";
            }
        },
        THU {
            @Override
            public Integer getValue() {
                return 4;
            }
    
            @Override
            public String getKey() {
                return "星期四";
            }
        },
        FRI {
            @Override
            public Integer getValue() {
                return 5;
            }
    
            @Override
            public String getKey() {
                return "星期五";
            }
        },
        SAT {
            @Override
            public Integer getValue() {
                return 6;
            }
    
            @Override
            public String getKey() {
                return "星期六";
            }
        };
    
        public abstract Integer getValue();
        public abstract String getKey();
    
        /**
         * 返回由key和value组成的map集合:
         * {星期二=2, 星期六=6, 星期三=3, 星期四=4, 星期五=5, 星期日=0, 星期一=1}
         * @return
         */
        public static Map<String, Object> getKeyValueMap() {
            HashMap<String, Object> map = new HashMap<>();
            WeekDayEM[] values = WeekDayEM.values();
            for (WeekDayEM value : values) {
                String k = value.getKey();
                Integer v = value.getValue();
                map.put(k, v);
            }
            return map;
        }
    
        /**
         * 返回由所有key组成的list集合:
         * [星期日, 星期一, 星期二, 星期三, 星期四, 星期五, 星期六]
         * @return
         */
        public static List<Object> getAllKey() {
            List<Object> keyList = new ArrayList<>();
            WeekDayEM[] values = WeekDayEM.values();
            for (WeekDayEM value : values) {
                String k = value.getKey();
                keyList.add(k);
            }
            return keyList;
        }
    
        /**
         * 返回由所有value组成的list集合:
         * [0, 1, 2, 3, 4, 5, 6]
         * @return
         */
        public static List<Object> getAllValue() {
            List<Object> valueList = new ArrayList<>();
            WeekDayEM[] values = WeekDayEM.values();
            for (WeekDayEM value : values) {
                Integer v = value.getValue();
                valueList.add(v);
            }
            return valueList;
        }
    }

    在上面的枚举类中,定义了两个抽象方法:

    所以每一个枚举值(对象)都必须实现这两个抽象方法。

    用法举例:

    /**
     * Created by SYJ on 2017/4/30.
     */
    public class AppTest {
        public static void main(String[] args) {
            String key = WeekDayEM.THU.getKey();
            Integer value = WeekDayEM.THU.getValue();
            //输出  星期四, 4
            System.out.println(key + ", " + value);
        }
    }

    如果觉得本文对您有帮助,不妨扫描下方微信二维码打赏点,您的鼓励是我前进最大的动力:

  • 相关阅读:
    hive与hbase整合
    待重写
    hive DML
    【知识强化】第六章 总线 6.1 总线概述
    【知识强化】第五章 中央处理器 5.1 CPU的功能和基本结构
    【知识强化】第四章 指令系统 4.3 CISC和RISC的基本概念
    【知识强化】第四章 指令系统 4.2 指令寻址方式
    【知识强化】第四章 指令系统 4.1 指令格式
    【知识强化】第三章 存储系统 3.6 高速缓冲存储器
    【知识强化】第三章 存储系统 3.5 双口RAM和多模块存储器
  • 原文地址:https://www.cnblogs.com/jun1019/p/6792424.html
Copyright © 2011-2022 走看看