ITPub博客

首页 > 应用开发 > Java > JDK5.0新特性的学习--枚举

JDK5.0新特性的学习--枚举

原创 Java 作者:xuehongliang 时间:2007-06-29 08:45:24 0 删除 编辑

(1)简单的例子

  JDK5.0的枚举,正好可以解决上面我们讨论的问题,而且更简洁。还是用上面的代码做示例,只需要将Color类修改如下,Flower、Client都无法更改。

 
java 代码
  1. public enum Color { RED, BLACK, YELLOW, BLUE, WHITE, ORANGE}
接下来我们做更深一步的说明: 
  • 所有枚举类都是java.lang.Enum的子类(JDK内核自动将Color隐性继承自Enum)
  • RED...ORANGE都是Color的实例对象
 上面的Color枚举类,功能好象还和以前的例子不完全一样,我们再次修改如下。
java 代码
  1. public enum Color {
  2. RED(0), BLACK(1), YELLOW(2), BLUE(3), WHITE(4), ORANGE(5);
  3. int color;
  4. Color(int color){
  5. this.color=color;
  6. }
  7. public int getColorValue(){
  8. return color;
  9. }
  10. }
从这里我们可以看到枚举类是如何创建构造函数及方法的,有一些隐性的东西要说明一下: 
  • 枚举类的构造函数要求是private的,如果象例子里那样不加修饰符,则Java会自动给加上。但如果你想加上public则会报错。
  • RED(0), BLACK(1)...等枚举值必须定义在前面,而且最后一个枚举值ORANGE(5);未尾用分号结束。

(2)在循环中使用枚举类

  枚举类都有一个values方法可以得到它值的数组:Color[] colors=Color.values();而且枚举类都支持泛型

(以后的文章会重点说到),所以我们可以这样来遍历这个数组:

Color[] colors = Color.values();
for (Color c : colors) {
System.out.println("color value=" + c.getColorValue());
}

(3)在switch(分支)中使用枚举

  如下代码示例,这里要注意将“case RED:”写成“case Color.RED:”是会报错的,因为JDK5.0可以自动根据

“switch (color)”就判断入你要使用什么枚举类型了。从这里也可以看出JDK5.0确实为用户做了帖心的考虑,尽量让程序员少写代码,写更简单的代码。

Color color = Color.RED;
switch (color) {
case RED:
//process ...
break;
case BLACK:
//process ...
break;
case WHITE:
//process ...
break;
default:
//process ...
}

(4)JDK5.0新增的集合:EnumMap 和EnumSet

  给出两个例子,一切尽在不言中了。(说明:这两个例子用到了JDK5.0中泛型的知识)

Map map = new EnumMap(Color.class);
map.put(Color.RED, "红色");
map.put(Color.BLACK, "黑色");
map.put(Color.WHITE, "白色");

for (Color c : Color.values()) {
System.out.println(c + " chinese is: " + map.get(c));
}

Set all = EnumSet.allOf(Color.class);
EnumSet warmColors = EnumSet.of(Color.RED, Color.YELLOW);
Set notWarmColors = EnumSet.complementOf(warmColors);
Set notBlack = EnumSet.range(Color.RED, Color.YELLOW);

[@more@]

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/800861/viewspace-922109/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论
  • 博文量
    40
  • 访问量
    391222