java枚舉類型-Enum
前言
枚舉是 Java1.5 引入的新特性,通過關(guān)鍵字 enum 來定義枚舉類。
應(yīng)用
定義
- 關(guān)鍵字enum可以將一組具名的值的有限集合創(chuàng)建為一種新的類型,而這些具名的值可以作為常規(guī)的程序組件使用。
enum WeekEnum { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend }
基本Enum特性
- 枚舉類的定義
enum WeekEnum { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend; public static void main(String[] args) { for (WeekEnum item : WeekEnum.values()) { System.out.println(item.ordinal()); System.out.println(item.name()); System.out.println(item.getDeclaringClass()); System.out.println(Enum.valueOf(WeekEnum.class, item.name())); } } }
- 常用方法
方法 | 說明 |
---|---|
values() | 可以遍歷enum實(shí)例,其返回enum實(shí)例的數(shù)組 |
ordinal() | 返回每個(gè)實(shí)例在聲明時(shí)的次序 |
name() | 返回enum實(shí)例聲明時(shí)的名稱 |
getDeclaringClass() | 返回其所屬的enum類 |
Enum.valueOf() | 根據(jù)給定的名稱返回相應(yīng)的enum實(shí)例 |
Enum的靜態(tài)導(dǎo)入
- static import 可以將 enum 實(shí)例的標(biāo)識(shí)符帶入當(dāng)前類,無需再用enum類型來修飾 enum 實(shí)例
import static com.coisini.springbootlearn.WeekEnum.*; public class WeekEnumTest { public static void main(String[] args) { System.out.println(Monday.name()); // Monday System.out.println(Tuesday.name()); //Tuesday } }
Enum中添加新方法
- Enum 可以看做是一個(gè)常規(guī)類(除了不能繼承自一個(gè)enum),enum 中可以添加方法和 main 方法。
public enum WeekEnum { Monday(1, "周一"), Tuesday(2, "周二"), Wednesday(3, "周三"), Thursday(4, "周四"), Friday(5, "周五"), Saturday(6, "周六"), weekend(7, "周天"); private Integer value; private String description; /** * 構(gòu)造方法 * @param value * @param description */ WeekEnum(Integer value, String description) { this.value = value; this.description = description; } /** * 獲取value * @return */ public Integer getValue() { return this.value; } /** * 獲取Desc * @return */ public String getDesc() { return this.description; } /** * 重寫ToString方法 * @return */ public String toString() { return this.getValue() + " " + this.getDesc(); } public static void main(String[] args) { for (WeekEnum item : WeekEnum.values()) { System.out.println(item); } } }
Switch語句中的Enum
- 正確用法
WeekEnum weekEnum = WeekEnum.Friday; switch (weekEnum) { case Friday: System.out.println(weekEnum); break; case Saturday: break; }
- 錯(cuò)誤用法
WeekEnum weekEnum = WeekEnum.Friday; switch(weekEnum) { // An enum switch case label must be the unqualified name of an enumeration constant case WeekEnum.Friday: break; default: break; }
- 常規(guī)情況下必須使用 enum 類型來修飾 enum 實(shí)例,但在 case 語句中不必如此。
Enum的繼承
- 所有的enum都繼承自java.lang.Enum類,由于Java不支持多重繼承,所以enum不能繼承其他類,但可以實(shí)現(xiàn)一個(gè)或多個(gè)接口。
public interface Period { enum WeekEnum implements Period{ Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend } enum MonthEnum implements Period{ January, February, March, April, May, June } class PeriodTest { public static void main(String[] args) { Period week = WeekEnum.Friday; Period month = MonthEnum.April; System.out.println(month + " " + week); // April Friday } } }
EnumSet的使用
- enum 中不能刪除和添加元素,Java SE5 引入了EnumSet,其元素必須來自一個(gè) enum 。
import java.util.EnumSet; enum EnumSetTest { Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend; public static void main(String[] args) { EnumSet<EnumSetTest> points = EnumSet.noneOf(EnumSetTest.class); points.add(Monday); System.out.println(points); // [Monday] points.addAll(EnumSet.of(Tuesday, Wednesday)); System.out.println(points); // [Monday, Tuesday, Wednesday] points = EnumSet.allOf(EnumSetTest.class); System.out.println(points); // [Monday, Tuesday, Wednesday, Thursday, Friday, Saturday, weekend] points.removeAll(EnumSet.of(Monday, Tuesday)); System.out.println(points); // [Wednesday, Thursday, Friday, Saturday, weekend] points = EnumSet.complementOf(points); System.out.println(points); // [Monday, Tuesday] } }
EnumMap的使用
- EnumMap 是一種特殊的 Map,其 key 值必須來自一個(gè) enum,enum 實(shí)例定義的次序決定了其在EnumMap中的順序。
import java.util.EnumMap; import java.util.Map; public enum EnumMapTest { MON, TUE, WED, THU, FRI, SAT, WEE; public static void main(String[] args) { EnumMap<EnumMapTest, String> enumMap = new EnumMap<EnumMapTest, String>(EnumMapTest.class); enumMap.put(MON, "Monday"); enumMap.put(TUE, "Tuesday"); for (Map.Entry<EnumMapTest, String> em : enumMap.entrySet()) { System.out.println(em.getKey() + " " + em.getValue()); // MON Monday TUE Tuesday } } }
常量相關(guān)方法
- enum 允許為 enum 實(shí)例編寫方法,為每個(gè) enum 實(shí)例賦予不同的行為,要實(shí)現(xiàn)常量的相關(guān)方法需要為 enum 定義- 實(shí)現(xiàn) abstract 方法。
public enum EnumAbstract { MON { void getDetail() { System.out.println("Monday"); } }, TUE { void getDetail() { System.out.println("Tuesday"); } }, WED { void getDetail() { System.out.println("Wednesday"); } }; abstract void getDetail(); public static void main(String[] args) { for (EnumAbstract ea : EnumAbstract.values()) { ea.getDetail(); } } }
枚舉值向枚舉類型轉(zhuǎn)換
import java.util.stream.Stream; public enum WeekEnum { Monday(1, "周一"), Tuesday(2, "周二"), Wednesday(3, "周三"), Thursday(4, "周四"), Friday(5, "周五"), Saturday(6, "周六"), weekend(7, "周天"); private Integer value; private String description; /** * 構(gòu)造方法 * @param value * @param description */ WeekEnum(Integer value, String description) { this.value = value; this.description = description; } /** * 枚舉值向枚舉類型轉(zhuǎn)換 * @param value * @return */ public static WeekEnum toWeekEnum(int value) { return Stream.of(WeekEnum.values()) .filter(item -> item.value == value) .findAny() .orElse(null); } public static void main(String[] args) { System.out.println(WeekEnum.toWeekEnum(1)); // Monday } }
以上就是java枚舉類型-Enum的詳細(xì)內(nèi)容,更多關(guān)于java Enum的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Netty分布式pipeline管道Handler的添加代碼跟蹤解析
這篇文章主要介紹了Netty分布式pipeline管道Handler的添加代碼跟蹤解析,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-03-03mybatis update set 多個(gè)字段實(shí)例
這篇文章主要介紹了mybatis update set 多個(gè)字段實(shí)例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2021-01-01關(guān)于IDEA使用jsp可以訪問頁面轉(zhuǎn)換為html彈出頁面為404的問題
這篇文章主要介紹了關(guān)于IDEA使用jsp可以訪問頁面轉(zhuǎn)換為html彈出頁面為404的問題及解決方法,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-12-12Java string類型轉(zhuǎn)換成map代碼實(shí)例
這篇文章主要介紹了Java string類型轉(zhuǎn)換成map代碼實(shí)例,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-03-03Java線程休眠_(dá)動(dòng)力節(jié)點(diǎn)Java學(xué)院整理
sleep() 的作用是讓當(dāng)前線程休眠,即當(dāng)前線程會(huì)從“運(yùn)行狀態(tài)”進(jìn)入到“休眠(阻塞)狀態(tài)”。下面通過實(shí)例代碼給大家介紹Java線程休眠的知識(shí),需要的朋友參考下吧2017-05-05Java實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼(前端部分)
這篇文章主要為大家介紹了如何用Java語言實(shí)現(xiàn)滑動(dòng)驗(yàn)證碼的生成(前端部分),文中的示例代碼講解詳細(xì),具有一定的學(xué)習(xí)價(jià)值,感興趣的小伙伴可以跟隨小編學(xué)習(xí)一下2022-10-10