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

首頁 > 編程 > Java > 正文

熟練使用java的Enum、EnumSet、EnumMap

2019-11-11 05:52:39
字體:
來源:轉載
供稿:網友

java枚舉一直沒有系統學習過,之前就是用枚舉來替代接口中的常量,今天看到同事寫的一段代碼使用了EnumSet,不是特別熟悉。于是重新學習了Enum、EnumSet、EnumMap。

首先看下最基本的枚舉使用場景:

public enum EnumColor{    RED, GREEN, PINK, YELLOW, BLACK}
// 所有枚舉類默認繼承java.lang.EnumSystem.out.PRintln(EnumColor.class.getSuperclass() == Enum.class); //true// 枚舉常量的名字System.out.println(EnumColor.GREEN.name());//GREENSystem.out.println(EnumColor.RED.name());//RED// 枚舉常量的順序,從0開始System.out.println(EnumColor.GREEN.ordinal());//1System.out.println(EnumColor.RED.ordinal());//0// 通過字符生成枚舉對象實例,字符串必須是枚舉類中定義的名字,否則拋異常EnumColor instance = Enum.valueOf(EnumColor.class, "GREEN");System.out.println(instance == EnumColor.GREEN);//true// 通過字符生成枚舉對象實例,字符串必須是枚舉類中定義的名字,否則拋異常EnumColor instance2 = EnumColor.valueOf("GREEN");System.out.println(instance2 == EnumColor.GREEN);//true

如果我們想獲取EnumColor類的所有枚舉實例,那么有2種方式:
// 返回數組EnumColor[] values  = EnumColor.values();for(EnumColor each : values){	System.out.println(each);}// 返回EnumSetEnumSet<EnumColor> allSet = EnumSet.allOf(EnumColor.class);for(EnumColor each : allSet){	System.out.println(each);}

使用EnumSet可以獲取某個范圍的枚舉實例:
EnumSet<EnumColor> partialSet = EnumSet.range(EnumColor.PINK, EnumColor.BLACK);System.out.println(partialSet);// [PINK, YELLOW, BLACK]

EnumMap其實和HashMap差不多,不過使用EnumMap效率更高。
EnumMap<EnumColor, String> errMsgMap = new EnumMap<EnumColor, String>(EnumColor.class);errMsgMap.put(EnumColor.GREEN, "2,4,6");errMsgMap.put(EnumColor.RED, "1,7");for (Map.Entry<EnumColor, String> entry : errMsgMap.entrySet()) {	System.out.println(entry.getValue() + " " + entry.getKey().name());}使用枚舉我們可以定義構造函數,可以為枚舉類添加屬性和方法。
public enum EnumColorWithConsrutor{    RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLOW("黃色", 4);    private String name;    private int index;    // 構造函數,枚舉類型只能為私有    EnumColor(String name, int index) {        this.name = name;        this.index = index;    }		public String getName() {        return this.name;    }		public void setName(String name) {        this.name = name;    }}由于枚舉類默認繼承java.lang.Enum,所以不能在繼承別的類,但是可以實現別的接口。
public enum EnumColorComplex implements Runnable {    RED("紅色", 1),    GREEN("綠色", 2),    BLANK("白色", 3),    YELLOW("黃色", 4);    private String name;    private int index;    // 構造函數,枚舉類型只能為私有    EnumColor(String name, int index) {        this.name = name;        this.index = index;    }    public String getName() {        return this.name;    }    public void run() {        System.out.println(this.name());    }}


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 垣曲县| 浠水县| 大同县| 贵南县| 蛟河市| 萍乡市| 隆子县| 微山县| 邢台市| 五河县| 神池县| 景宁| 洱源县| 平安县| 龙川县| 宁陵县| 锡林浩特市| 拉萨市| 揭西县| 高淳县| 蓝田县| 宣城市| 刚察县| 临城县| 武邑县| 龙游县| 澄迈县| 江孜县| 洪湖市| 余江县| 濮阳市| 邵阳县| 安陆市| 福鼎市| 鞍山市| 九龙县| 碌曲县| 九江县| 杭州市| 团风县| 杭州市|