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/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- C學習-列舉(九)
- rust學習七、列舉Rust
- java中的列舉型別學習Java型別
- JDK 1.8 新特性學習(Stream)JDK
- Java1.8新特性學習Java
- Java列舉類學習到進階Java
- Automatic Reference Counting(ARC)特性學習(iOS5新特性學習之五)iOS
- JDK11新特性學習(二)JDK
- JDK11新特性學習(一)JDK
- C++ 11 新特性 nullptr 學習C++Null
- 物聯網學習教程—列舉型別型別
- JDK8 新特性學習筆記JDK筆記
- jdk-1.8新特性學習筆記JDK筆記
- JDK8新特性學習總結JDK
- 2019 年的 JavaScript 新特性學習指南 | 掘金年度徵文JavaScript
- Day69.註解&列舉類的複習 -Java註解&列舉類Java
- YU_C++演算法學習筆記 · 列舉C++演算法筆記
- 列舉和列舉的取值範圍
- 學習筆記~1.4 HTML5新特性筆記HTML
- 一起學習React18 新特性React
- 你一定需要知道的高階JAVA列舉特性!Java
- 學習七、ES2016與ES2017的新特性
- 推薦一個學習php8的新特性的文件PHP
- [Java學習筆記]JDK1.8新特性學習(一)Lambda表示式Java筆記JDK
- 通過示例來學習ES2016, 2017, 2018的新特性
- iOS學習筆記44 Swift(四)列舉和結構體iOS筆記Swift結構體
- Java 列舉、JPA 和 PostgreSQL 列舉JavaSQL
- JDK 新特性學習筆記之模組系統JDK筆記
- OceanBase學習之路11|體驗 DDL 新特性(Oracle 模式)Oracle模式
- OceanBase學習之路12|體驗 DDL 新特性(MySQL 模式)MySql模式
- Swift 5.0 值得關注的特性:增加 Result<T, E: Error> 列舉型別SwiftError型別
- 列舉
- 【新特性速遞】表格多列排序(SortingMulti)排序
- Java列舉-通過值查詢對應的列舉Java
- Java enum列舉類詳解 列舉的常見用法Java
- 陣列的學習陣列
- Solidity初學-0.8新特性Solid
- delphi 裡的 列舉
- 列舉子集的方法