国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 灵川县| 天台县| 葫芦岛市| 家居| 纳雍县| 辉县市| 连平县| 榆社县| 仙游县| 崇明县| 临颍县| 教育| 万载县| 禄劝| 平利县| 曲水县| 增城市| 定兴县| 织金县| 利津县| 迭部县| 苏州市| 缙云县| 高邮市| 类乌齐县| 东方市| 石台县| 鱼台县| 通渭县| 和政县| 诏安县| 白沙| 宁明县| 稷山县| 蚌埠市| 剑河县| 博白县| 泗洪县| 天台县| 沙田区| 大化|