1、作為普通的常量使用,如星期、季節、顏色、城市等等;通常配合switch語句使用。
例1: //周一到周天枚舉 public enum WeekEnum { MON,TUES,WED,THURS,FRI,SAT,SUN; } //jdk1.7開始switch語句開始支持String類型,而jdk1.6之前只支持int,char,enum類型,使用枚舉的話,能使代碼的可讀性大大增強 public class TestEnum { public static void main(String[] args) { WeekEnum week = WeekEnum.TUES; switch (week) { case MON: System.out.println("星期一"); break; case TUES: System.out.println("星期二"); break; case WED: System.out.println("星期三"); break; case THURS: System.out.println("星期四"); break; case FRI: System.out.println("星期五"); break; case SAT: System.out.println("星期六"); break; case SUN: System.out.println("星期天"); break; } } }
2、往枚舉中添加變量、構造函數、以達到靈活獲取指定值的目的(注: Java 要求必須先定義 enum 實例,否則編譯會報錯);通常用於一些業務系統中定義一些固定值,如用於匹配db中的字段值等。
例2: //利用構造函數將變量賦值,然后通過get方法獲取指定值 public enum CompanyEnum { SF("順豐速運", 1001),YTO("圓通速遞", 1002),STO("申通物流",1003),YD("韻達快運",1004),YZPY("中國郵政",1005); private CompanyEnum(String company, int code) { this.company = company; this.code = code; } private String company; // 公司名稱 private int code; // 公司編碼 public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } } //輸出->1001 、 順豐速運 public class TestEnum { public static void main(String[] args) { System.out.println(CompanyEnum.SF.getCode()); System.out.println(CompanyEnum.SF.getCompany()); } }
例3: //性別枚舉[0:男 1:女 2:未知] public enum GenderEnum { MAN(0),WOMEN(1),UNKNOWN(2); private int code; //編碼標識 private GenderEnum(int code){ this.code = code; } public int getCode() { return code; } } //輸出->0 、 1 、 2 public class TestEnum { public static void main(String[] args) { System.out.println(GenderEnum.MAN.getCode()); System.out.println(GenderEnum.WOMEN.getCode()); System.out.println(GenderEnum.UNKNOWN.getCode()); } }
3、往枚舉中添加自己特定方法,以實現自己所需的相關業務邏輯。
例4: public enum CompanyEnum { SF("順豐速運", 1001), YTO("圓通速遞", 1002), STO("申通物流", 1003), YD("韻達快運", 1004), YZPY("中國郵政", 1005); private CompanyEnum(String company, int code) { this.company = company; this.code = code; } private String company; // 公司名稱 private int code; // 公司編碼 public String getCompany() { return company; } public void setCompany(String company) { this.company = company; } public int getCode() { return code; } public void setCode(int code) { this.code = code; } //根據物流公司名字獲取對應的編碼 public static int getCodeByCompany(String company) { for (CompanyEnum c : CompanyEnum.values()) { if (c.getCompany().equals(company.trim())) { return c.code; } } return 0; } //根據物流公司編碼獲取對應的名字 public static String getCompanyByCode(int code) { for (CompanyEnum c : CompanyEnum.values()) { if (c.getCode() == code) { return c.getCompany(); } } return null; } } //輸出->1001 、 圓通速遞 public class TestEnum { public static void main(String[] args) { System.out.println(CompanyEnum.getCodeByCompany("順豐速運")); System.out.println(CompanyEnum.getCompanyByCode(1002)); } } 這種枚舉用法,通常還可用於系統的錯誤碼與對應的錯誤碼描述,然后根據錯誤碼獲取錯誤碼對應的描述。
4、java中的枚舉還有許多其它的用法,如重寫toString()、equals()等方法,實現接口、枚舉Map等等。
例5: /** * 枚舉本身的一些方法使用 */ public class TestEnum { public static void main(String[] args) { //返回此枚舉常量的名稱,繼承自java.lang.Enum類,通常重寫該方法以實現相關操作。輸出->SF System.out.println(CompanyEnum.SF.toString()); //返回此枚舉常量的名稱。輸出->SF System.out.println(CompanyEnum.SF.name()); //返回枚舉常量的序數(它在枚舉聲明中的位置,其中初始常量序數為零)。輸出->0 System.out.println(CompanyEnum.SF.ordinal()); //獲取枚舉中的常量個數。輸出->5 System.out.println(CompanyEnum.SF.values().length); //返回帶指定名稱的指定枚舉類型的枚舉常量。輸出->順豐速運 System.out.println(CompanyEnum.SF.valueOf(CompanyEnum.class, "SF").getCompany()); //比較此枚舉與指定對象的順序;SF位置是0,YTO位置是1,結果為 0-1=-1。輸出->-1 System.out.println(CompanyEnum.SF.compareTo(CompanyEnum.YTO)); //返回與此枚舉常量的枚舉類型相對應的 Class 對象。輸出->class com.cndmss.util.CompanyEnum System.out.println(CompanyEnum.SF.getDeclaringClass()); //。輸出->true System.out.println(CompanyEnum.SF.name().equals("SF")); //。輸出->true System.out.println(CompanyEnum.SF.equals(CompanyEnum.SF)); //。輸出->false System.out.println(CompanyEnum.SF.equals(CompanyEnum.YTO)); } }
例6: /** *EnumSet、EnumMap的使用 */ public class TestEnum { public static void main(String[] args) { //1、 EnumSet的使用 EnumSet<CompanyEnum> companySet = EnumSet.allOf(CompanyEnum.class); for (CompanyEnum company:companySet) { System.out.println(company.getCode() + ":" + company.getCompany()); } //2、EnumMap的使用 EnumMap<CompanyEnum, String> companyMap = new EnumMap(CompanyEnum.class); companyMap.put(CompanyEnum.SF, "順豐map"); companyMap.put(CompanyEnum.YTO, "圓通map"); Iterator<Entry<CompanyEnum, String>> iter = companyMap.entrySet().iterator(); while(iter.hasNext()){ Entry<CompanyEnum, String> entry = iter.next(); System.out.println(entry.getKey().name() + ":" + entry.getValue()); } } }