国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學(xué)院 > 開發(fā)設(shè)計 > 正文

枚舉

2019-11-14 10:59:18
字體:
供稿:網(wǎng)友

enum 的特征

public enum ColorEnum { RED("紅色"), BLUE("藍(lán)色"), GREEN("綠色"), ; PRivate String description; private static Random random = new Random(4l); ColorEnum(String description){ this.description = description; } public String getDescription() { return description; } @Override public String toString(){ return "enum:" + this.name(); } public static ColorEnum next(){ return values()[random.nextInt(values().length)]; } public static void main(String[] args){ // 1.values() for(ColorEnum colorEnum : ColorEnum.values()) { // 2.name() 與 toString() System.out.print(colorEnum.name() + " "); System.out.print(colorEnum + " "); System.out.print(colorEnum.getDescription() + " "); // 3.ordinal() System.out.println(colorEnum.ordinal()); } ColorEnum colorEnum = ColorEnum.next(); // 4.valueOf() ColorEnum colorEnum1 = ColorEnum.valueOf(colorEnum.name()); // 5.單例,equals 和 == 結(jié)果相同 System.out.println(colorEnum == colorEnum1); System.out.println(colorEnum.equals(colorEnum1)); // 6.getDeclaringClass() System.out.println(colorEnum.getDeclaringClass()); // 7.compareTo() 聲明順序比較 System.out.println(colorEnum.compareTo(RED)); System.out.println(colorEnum.compareTo(BLUE)); System.out.println(colorEnum.compareTo(GREEN)); // 8.getEnumConstants() ColorEnum[] values = ColorEnum.class.getEnumConstants(); }}name() 一定返回枚舉定義時的名稱,toString 默認(rèn)情況下與 name() 相同,但是在子類中 toString 可以覆蓋,而 name() 是 final 的。枚舉的實現(xiàn)是單例的,但是還是使用 equals 養(yǎng)成良好習(xí)慣。

神奇的 enum

將上一個例子編譯后的 .class 文件進(jìn)行反編譯后,會看到一些有趣的問題:

Compiled from "ColorEnum.java"public final class lirui.ColorEnum extends java.lang.Enum<lirui.ColorEnum> { public static final lirui.ColorEnum RED; public static final lirui.ColorEnum BLUE; public static final lirui.ColorEnum GREEN; public static lirui.ColorEnum[] values(); public static lirui.ColorEnum valueOf(java.lang.String); public java.lang.String getDescription(); public static lirui.ColorEnum next(); public java.lang.String toString(); public static void main(java.lang.String[]); static {};}編譯器為類聲明添加了 final,并且繼承了 Enum 類,所以編寫枚舉類時不能在繼承其他類,但是可以實現(xiàn)接口。編譯器添加了 static final 的枚舉對象,這也是我們平時可以使用 ColorEnum.RED 獲取枚舉實例的原因。所以枚舉實現(xiàn)是單例的。編譯器添加了 values(),valueOf() 這兩個方法,而對于他的父類 Enum 也有一個valueOf(),不過兩者參數(shù)不同,并不是同一個方法。將 ColorEnum 向上轉(zhuǎn)型為 Enum 時,values() 方法將失效,但是可以使用 Class 上的 getEnumConstants() 獲取所有 enum 實例。

enum 的多態(tài)

Java 允許為 enum 實例編寫方法,可以為 enum 定義一個或多個 abstract 方法,然后為每個 enum 實例實現(xiàn)該抽象方法。public enum ColorEnum{ RED("紅色"){ public String getName(){ return "紅色"; } }, BLUE("藍(lán)色"){ public String getName(){ return "藍(lán)色"; } }, GREEN("綠色") { String getName() { return "綠色"; } }, ; private String description; private static Random random = new Random(4); abstract String getName(); ColorEnum(String description){ this.description = description; } public String getDescription() { return description; } @Override public String toString(){ return "enum:" + this.name(); } public static ColorEnum next(){ return values()[random.nextInt(values().length)]; } public static void main(String[] args){ for(ColorEnum colorEnum : ColorEnum.values()) { System.out.println(colorEnum.getName()); } }}還可以在enum 實例中覆蓋 enum 定義的方法。public enum ColorEnum{ RED("紅色"){ public String getName(){ return "紅色"; } }, BLUE("藍(lán)色"){ public String getName(){ return "藍(lán)色"; } }, GREEN("綠色") { public String getName() { return "綠色"; } }, ; private String description; private static Random random = new Random(4); public String getName(){ return "顏色"; } ColorEnum(String description){ this.description = description; } public String getDescription() { return description; } @Override public String toString(){ return "enum:" + this.name(); } public static ColorEnum next(){ return values()[random.nextInt(values().length)]; } public static void main(String[] args){ for(ColorEnum colorEnum : ColorEnum.values()) { System.out.println(colorEnum.getName()); } }}

switch 中使用 enum

public static String getName(ColorEnum colorEnum){ switch (colorEnum){ case RED: return "紅色"; case BLUE: return "藍(lán)色"; case GREEN: return "綠色"; default: return null; } }

EnumSet

EnumSet 是為了通過 enum 創(chuàng)建一種替代品,以替代傳統(tǒng)的基于 int 的 “位標(biāo)志”,可以用來表示一些開關(guān)信息EnumSet 設(shè)計時充分考慮的性能,內(nèi)部將一個 long 值作為比特向量,并且具有很好的表達(dá)能力。如果 enum 實例的數(shù)量超過了 64(long 的長度)個,會再增加一個 long 。

EnumMap

EnumMap 是一個特殊的 map, 他要求其中的鍵必須來自一個 enum。由于 enum 的數(shù)量有限,所以 Enum 內(nèi)部可以使用數(shù)組實現(xiàn),所以它的速度也非常快。


發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 宣汉县| 许昌市| 德州市| 泰来县| 新田县| 祁门县| 陇西县| 蚌埠市| 庆安县| 日照市| 云梦县| 东海县| 洞头县| 任丘市| 洛浦县| 浏阳市| 景谷| 湖南省| 克什克腾旗| 南江县| 星座| 鹤壁市| 江北区| 台中县| 城步| 玉门市| 江都市| 突泉县| 平利县| 佳木斯市| 枣强县| 离岛区| 连江县| 南投县| 桃园市| 鄂伦春自治旗| 天台县| 丰台区| 霍山县| 商水县| 建瓯市|