• 枚举的使用方法[自己总结]


    最简单的枚举使用方式:

    /**
     * 季节枚举类
     * 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);
        }
    }

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

  • 相关阅读:
    字符串和正则表达式
    委托和事件
    集合
    C#基础
    Pwnable中的passcode解题记录:
    DevExpress插件中GridView控件界面显示风格的保存与加载
    地区代码表(利用Hashtable实现)
    关于DevExpress插件中LookUpEdit控件的快速搜索列的定位问题
    C#实现PictureBox控件的动态添加及在每个图像左上角添加一个复选框
    Android4.4新的特性,在应用内开启透明状态栏和透明虚拟按钮。
  • 原文地址:https://www.cnblogs.com/jun1019/p/6792424.html
Copyright © 2020-2023  润新知