JDK5.0新特性的學習--列舉
(1)簡單的例子
JDK5.0的列舉,正好可以解決上面我們討論的問題,而且更簡潔。還是用上面的程式碼做示例,只需要將Color類修改如下,Flower、Client都無法更改。
java 程式碼
- public enum Color { RED, BLACK, YELLOW, BLUE, WHITE, ORANGE}
接下來我們做更深一步的說明:
- 所有列舉類都是java.lang.Enum的子類(JDK核心自動將Color隱性繼承自Enum)
- RED...ORANGE都是Color的例項物件
上面的Color列舉類,功能好象還和以前的例子不完全一樣,我們再次修改如下。
java 程式碼
- public enum Color {
- RED(0), BLACK(1), YELLOW(2), BLUE(3), WHITE(4), ORANGE(5);
- int color;
- Color(int color){
- this.color=color;
- }
- public int getColorValue(){
- return color;
- }
- }
從這裡我們可以看到列舉類是如何建立建構函式及方法的,有一些隱性的東西要說明一下:
- 列舉類的建構函式要求是private的,如果象例子裡那樣不加修飾符,則Java會自動給加上。但如果你想加上public則會報錯。
- RED(0), BLACK(1)...等列舉值必須定義在前面,而且最後一個列舉值ORANGE(5);未尾用分號結束。
[@more@](2)在迴圈中使用列舉類
列舉類都有一個values方法可以得到它值的陣列:Color[] colors=Color.values();而且列舉類都支援泛型
(以後的文章會重點說到),所以我們可以這樣來遍歷這個陣列:
Color[] colors = Color.values();
for (Color c : colors) {
System.out.println("color value=" + c.getColorValue());
}(3)在switch(分支)中使用列舉
如下程式碼示例,這裡要注意將“case RED:”寫成“case Color.RED:”是會報錯的,因為JDK5.0可以自動根據
“switch (color)”就判斷入你要使用什麼列舉型別了。從這裡也可以看出JDK5.0確實為使用者做了帖心的考慮,儘量讓程式設計師少寫程式碼,寫更簡單的程式碼。
Color color = Color.RED;
switch (color) {
case RED:
//process ...
break;
case BLACK:
//process ...
break;
case WHITE:
//process ...
break;
default:
//process ...
}(4)JDK5.0新增的集合:EnumMap 和EnumSet
給出兩個例子,一切盡在不言中了。(說明:這兩個例子用到了JDK5.0中泛型的知識)
Map map = new EnumMap(Color.class);
map.put(Color.RED, "紅色");
map.put(Color.BLACK, "黑色");
map.put(Color.WHITE, "白色");
for (Color c : Color.values()) {
System.out.println(c + " chinese is: " + map.get(c));
}Set all = EnumSet.allOf(Color.class);
EnumSet warmColors = EnumSet.of(Color.RED, Color.YELLOW);
Set notWarmColors = EnumSet.complementOf(warmColors);
Set notBlack = EnumSet.range(Color.RED, Color.YELLOW);
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/800861/viewspace-922109/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- JDK5.0新特性之:列舉JDK
- JDK5.0新特性的學習--泛型(下)JDK泛型
- JDK5.0新特性的學習--泛型(上)JDK泛型
- JDK5.0新特性的學習--後設資料JDK
- JDK5.0新特性的學習--靜態匯入JDK
- JDK5.0新特性的學習--可變長引數JDK
- C#特性學習與使用(為列舉定義Description)C#
- oracle12c新特性列舉說明Oracle
- C學習-列舉(九)
- java中的列舉型別學習Java型別
- Java高階特性之列舉學習總結Java
- Java列舉類學習到進階Java
- JDK 1.8 新特性學習(Stream)JDK
- Java1.8新特性學習Java
- java8新特性學習Java
- 物聯網學習教程—列舉型別型別
- Object C學習筆記19-列舉Object筆記
- C++ 11 新特性 nullptr 學習C++Null
- JDK11新特性學習(一)JDK
- JDK11新特性學習(二)JDK
- Automatic Reference Counting(ARC)特性學習(iOS5新特性學習之五)iOS
- jdk-1.8新特性學習筆記JDK筆記
- JDK8新特性學習總結JDK
- JDK8 新特性學習筆記JDK筆記
- 《從零開始學Swift》學習筆記(Day 24)——列舉Swift筆記
- Day69.註解&列舉類的複習 -Java註解&列舉類Java
- 一起學習React18 新特性React
- 學習筆記~1.4 HTML5新特性筆記HTML
- 天天學習ORACLE(三)-11G新特性Oracle
- 推薦一個學習php8的新特性的文件PHP
- JDK 新特性學習筆記之模組系統JDK筆記
- [Java學習筆記]JDK1.8新特性學習(一)Lambda表示式Java筆記JDK
- 你一定需要知道的高階JAVA列舉特性!Java
- iOS學習筆記44 Swift(四)列舉和結構體iOS筆記Swift結構體
- Swift學習筆記第五篇(閉包和列舉)Swift筆記
- Oracle11新特性——虛擬列Oracle
- ORACLE 10G 新特性(INCREMENTALLY UPDATED BACKUPS)學習Oracle 10gREM
- 草根學Python(十一)列舉類Python