熟练使用java的Enum、EnumSet、EnumMap
来源:互联网 发布:5c5c5c最新域名升级 编辑:程序博客网 时间:2024/06/05 03:22
对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<EnumColor> partialSet = EnumSet.range(EnumColor.PINK, EnumColor.BLACK);System.out.println(partialSet);// [PINK, YELLOW, BLACK]
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()); }}
0 0
- 熟练使用java的Enum、EnumSet、EnumMap
- Java中Enum、EnumMap、EnumSet使用示例
- Java Enum、EnumMap、EnumSet 详解
- Enum、EnumMap、EnumSet的用法讲解
- Enum、EnumMap、EnumSet的用法讲解
- enum,EnumMap,EnumSet
- Java enum enumset enummap的详解(记性不好就多动笔)
- 枚举:集合对enum的支持,EnumSet,EnumMap
- Enum和EnumSet的使用
- enumset和enummap使用示例
- Java 之EnumSet与EnumMap
- EnumSet和EnumMap的总结
- 14. JAVA 枚举(Enum、类集EnumMap&EnumSet 、实现接口、定义抽象方法) ----- 学习笔记
- java集合-EnumMap与EnumSet
- Java记录 -81- EnumSet和EnumMap
- 如何使用EnumSet实现基于bit field的enum set?
- Emun 枚举类型使用浅析——包括enumSet enumMap
- 说说Java中的枚举——EnumMap与EnumSet
- java TLAB分析
- POJ 3096 Surprising Strings(水题)
- Wireshark网络抓包(二)——过滤器
- Android性能优化系列之内存优化
- 假期训练——Hangman Judge UVA - 489 模拟
- 熟练使用java的Enum、EnumSet、EnumMap
- 虚拟机运行时常量池与String的intern方法
- Android Studio 执行 lint task失败的问题
- Java基础学习总结(97)——合格的Java的架构师需要具备的技术知识
- Hyperledger fablic 1.0 在centos7环境下的安装与部署和动态增加节点
- php的CI框架的配置文件的方法
- HDU 1163 Eddy's digital Roots 【九余数定理 Or 规律(瞎搞)】
- CentOS升级Python2.7.12
- SSH项目spring版本和jdk的版本不匹配的问题