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

最简单的枚举使用方式:

/**
 * 季节枚举类
 * 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这个枚举值的名称为:\t" + 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这个枚举值对应的索引为:\t" + index);
        
        //输出:  索引4对应的枚举值为:    Apr
        MonthEnum monthEnum = MonthEnum.getEnumTypeByIndex(4);
        System.out.println("索引4对应的枚举值为:\t" + 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);
    }
}

 

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

 

posted @ 2017-05-01 18:33  xuebusi  阅读(15139)  评论(0编辑  收藏  举报