最簡單的枚舉使用方式:
/** * 季節枚舉類 * 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); } }
如果覺得本文對您有幫助,不妨掃描下方微信二維碼打賞點,您的鼓勵是我前進最大的動力: