enum 的全称为 enumeration, 是 JDK 1.5 中引入的新特性,存放在 java.lang 包中。
原始的接口定义常量
语法(定义)
enum 对象的常用方法介绍
给 enum 自定义属性和方法
enum 的原理分析
enum 对象常用操作使用
EnumSet,EnumMap 的应用
原始的接口定义常量
1 | public interface IConstants { |
语法(定义)
创建枚举类型要使用 enum 关键字,隐含了所创建的类型都是 java.lang.Enum 类的子类(java.lang.Enum 是一个抽象类)。枚举类型符合通用模式 Class Enum<E extends Enum
1 | public enum EnumTest { |
这段代码实际上调用了7次 Enum(String name, int ordinal):
1 | new Enum<EnumTest>("MON",0); |
enum 对象的常用方法介绍
int compareTo(E o)
比较此枚举对象与指定枚举对象的顺序。枚举默认实现了java.lang.Comparable接口,返回-1,表示此对象在指定枚举对象之前,返回0,表示两者位置相同,返回1,表示此枚举对象在指定枚举对象之后。
Class
返回与此枚举对象的枚举类型相对应的 Class 对象。
String name()
返回此枚举对象的名称,在其枚举声明中对其进行声明。
int ordinal()
返回枚举对象的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String toString()
返回枚举对象的名称,它包含在声明中。
<T extends Enum
values方法在 java.lang.Enum 中并不存在,它是编译器在编译枚举类的时候添加上去的。它返回所有枚举对象的一个数组。
static <T extends Enum
这个方法同样是编译在编译的时候添加到枚举类中去的。返回带指定名称的枚举对象。
static <T extends Enum
返回带指定名称的指定枚举类型的枚举常量。
给 enum 自定义属性和方法
如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且Java要求必须先定义enum实例。
1 | public enum Week { |
所以使用普通的 Java 类就可以实现枚举,参考 Java枚举(用Java普通类模拟枚举的实现原理及JDK枚举API使用示例)。
enum 对象常用操作使用
compareTo
1 | Week mon = Week.MON; |
输出结果:
1 | 星期一的位置在星期二前面 |
values
1 | for (Week week : Week.values()) { |
输入结果:
1 | name - ordinal : MON - 0 |
自定义的属性并不会影响父类 Enum 类里面定义的属性,因为父类中的属性为私有的。
valueOf
1 | Week mon = Week.MON; |
switch 语句
从 java1.6 之后,可以在switch语句的case中放入枚举元素。
1 | Week mon = Week.MON; |
输出结果:
1 | 星期一 |
根据自定义的属性返回枚举常量
Week week = Week.getWeek("星期一");
System.out.println(week.name());
输出结果:
MON
如果长时间无法加载,请针对 disq.us | disquscdn.com | disqus.com 启用代理