java中的enum是再JDK5.0以后的版本添加的,它不仅仅是一个枚举类型,还包括一些比较好用的操作。
首先是其他语言中枚举类型的一般特性:
public enum Color {
RED, GREEN, BLANK, YELLOW
}
可以使用for循环遍历
for (Color c : Color.values()) {
System.out.println(c);
}
使用集合EnumSet和EnumMap
EnumSet colorSet = EnumSet.allOf(Color.class);
for (Color s : colorSet) {
System.out.println(s);
}
EnumMap colorMap = new EnumMap(Color.class);
colorMap.put(Color.RED, "is Red");
colorMap.put(Color.YELLOW, "is Yellow");
for (Color s : Color.values()) {
System.out.println(s.name() + ":" + colorMap.get(s));
}
switch的参数可以使用enum。
enum也是一个类,因此和类一样可以有成员变量和方法(包括构造方法),也可以实现接口,但不能继承(因为已经继承了Enum这个类)。
个人认为最重要的,可以给枚举常量添加方法:
先定义一个abstract方法,然后各个常量都可以实现该方法
public enum Operation { PLUS { double eval(double x, double y) { return x + y; } }, MINUS { double eval(double x, double y) { return x - y; } }, TIMES { double eval(double x, double y) { return x * y; } }, DIVIDE { double eval(double x, double y) { return x / y; } }; abstract double eval(double x, double y);
有了这种性质,就可以轻松的以enum实现状态机和多路分发了,例如jsoup中确实使用了这种性质来解析xml}