在c语言中我们经常使用enum枚举类型,在java中我们也可以使用enum类型。
enum Color{
RED(1),BLACK(2),WHITE(3);
private Color(int value){
this.value = value;
}
public String toString(){ //覆盖了父类Enum的toString()
return super.toString()+""+value;
}
private int value; //自定义数据域,private为了封装。
}
public class TestEnum {
public static void main(String args[])
{
Color color=Color.RED;
System.out.println(color); // 调用了toString()方法
System.out.println(color.ordinal());
Color color1=Color.WHITE;
System.out.println(color1); // 调用了toString()方法
System.out.println(color1.ordinal());
System.out.println(Color.valueOf("RED"));//valueOf方法够着新的enum
}
}
Enum 相关工具类
JDK5.0 中在增加 Enum 类的同时,也增加了两个工具类 EnumSet 和 EnumMap,这两个类都放在 java.util 包中。EnumSet 是一个针对枚举类型的高性能的 Set 接口实现。EnumSet 中装入的所有枚举对象都必须是同一种类型,在其内部,是通过 bit-vector 来实现,也就是通过一个 long 型数。EnumSet 支持在枚举类型的所有值的某个范围中进行迭代。回到上面日期枚举的例子上:
enum WeekDayEnum { Mon, Tue, Wed, Thu, Fri, Sat, Sun }
你能够在每周七天日期中进行迭代,EnumSet 类提供一个静态方法 range 让迭代很容易完成:
for(WeekDayEnum day : EnumSet.range(WeekDayEnum.Mon, WeekDayEnum.Fri)) { System.out.println(day); }
打印结果如下:
Mon Tue Wed Thu Fri
EnumSet 还提供了很多个类型安全的获取子集的 of 方法,使你很容易取得子集:
EnumSet<WeekDayEnum> subset = EnumSet.of(WeekDayEnum.Mon, WeekDayEnum.Wed); for (WeekDayEnum day : subset) { System.out.println(day); }
打印结果如下:
Mon Wed
与 EnumSet 类似,EnumMap 也是一个高性能的 Map 接口实现,用来管理使用枚举类型作为 keys 的映射表,内部是通过数组方式来实现。EnumMap 将丰富的和安全的 Map 接口与数组快速访问结合到一起,如果你希望要将一个枚举类型映射到一个值,你应该使用 EnumMap。看下面的例子:
EnumMap 示例
// 定义一个 EnumMap 对象,映射表主键是日期枚举类型,值是颜色枚举类型 private static Map<WeekDayEnum, RainbowColor> schema = new EnumMap<WeekDayEnum, RainbowColor>(WeekDayEnum.class); static{ // 将一周的每一天与彩虹的某一种色彩映射起来 for (int i = 0; i < WeekDayEnum.values().length; i++) { schema.put(WeekDayEnum.values()[i], RainbowColor.values()[i]); } } System.out.println("What is the lucky color today?"); System.out.println("It's " + schema.get(WeekDayEnum.Sat));
当你询问周六的幸运色彩时候,会得到蓝色:
运行结果
What is the lucky color today? It's BLUE