Java枚举的应用_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > Java枚举的应用

Java枚举的应用

 2013/10/24 0:53:04  雨打蕉叶  程序员俱乐部  我要评论(0)
  • 摘要:DK1.5引入了新的类型——枚举。在Java中它虽然算个“小”功能,却给我的开发带来了“大”方便。用法一:常量在JDK1.5之前,我们定义常量都是:publicstaticfianl....。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。Java代码publicenumColor{RED,GREEN,BLANK,YELLOW}用法二:switchJDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强
  • 标签:Java 应用 枚举

DK1.5引入了新的类型——枚举。在 Java 中它虽然算个“小”功能,却给我的开发带来了“大”方便。

用法一:常量

JDK1.5 之前,我们定义常量都是: publicstaticfianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。

?

Java代码
    class="dp-j">
  1. public?enum?Color?{??
  2. ??RED,?GREEN,?BLANK,?YELLOW??
  3. }??

?

用法二:switch

JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。

?

Java代码
  1. enum?Signal?{??
  2. ????GREEN,?YELLOW,?RED??
  3. }??
  4. public?class?TrafficLight?{??
  5. ????Signal?color?=?Signal.RED;??
  6. ????public?void?change()?{??
  7. ????????switch?(color)?{??
  8. ????????case?RED:??
  9. ????????????color?=?Signal.GREEN;??
  10. ????????????break;??
  11. ????????case?YELLOW:??
  12. ????????????color?=?Signal.RED;??
  13. ????????????break;??
  14. ????????case?GREEN:??
  15. ????????????color?=?Signal.YELLOW;??
  16. ????????????break;??
  17. ????????}??
  18. ????}??
  19. }??

?

?

用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。

?

Java代码
  1. public?enum?Color?{??
  2. ????RED("红色",?1),?GREEN("绿色",?2),?BLANK("白色",?3),?YELLO("黄色",?4);??
  3. ????//?成员变量??
  4. ????private?String?name;??
  5. ????private?int?index;??
  6. ????//?构造方法??
  7. ????private?Color(String?name,?int?index)?{??
  8. ????????this.name?=?name;??
  9. ????????this.index?=?index;??
  10. ????}??
  11. ????//?普通方法??
  12. ????public?static?String?getName(int?index)?{??
  13. ????????for?(Color?c?:?Color.values())?{??
  14. ????????????if?(c.getIndex()?==?index)?{??
  15. ????????????????return?c.name;??
  16. ????????????}??
  17. ????????}??
  18. ????????return?null;??
  19. ????}??
  20. ????//?get?set?方法??
  21. ????public?String?getName()?{??
  22. ????????return?name;??
  23. ????}??
  24. ????public?void?setName(String?name)?{??
  25. ????????this.name?=?name;??
  26. ????}??
  27. ????public?int?getIndex()?{??
  28. ????????return?index;??
  29. ????}??
  30. ????public?void?setIndex(int?index)?{??
  31. ????????this.index?=?index;??
  32. ????}??
  33. }??

?

?

用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子

?

Java代码
  1. public?enum?Color?{??
  2. ????RED("红色",?1),?GREEN("绿色",?2),?BLANK("白色",?3),?YELLO("黄色",?4);??
  3. ????//?成员变量??
  4. ????private?String?name;??
  5. ????private?int?index;??
  6. ????//?构造方法??
  7. ????private?Color(String?name,?int?index)?{??
  8. ????????this.name?=?name;??
  9. ????????this.index?=?index;??
  10. ????}??
  11. ????//覆盖方法??
  12. ????@Override??
  13. ????public?String?toString()?{??
  14. ????????return?this.index+"_"+this.name;??
  15. ????}??
  16. }??

?

用法五:实现接口

所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。

?

Java代码
  1. public?interface?Behaviour?{??
  2. ????void?print();??
  3. ????String?getInfo();??
  4. }??
  5. public?enum?Color?implements?Behaviour{??
  6. ????RED("红色",?1),?GREEN("绿色",?2),?BLANK("白色",?3),?YELLO("黄色",?4);??
  7. ????//?成员变量??
  8. ????private?String?name;??
  9. ????private?int?index;??
  10. ????//?构造方法??
  11. ????private?Color(String?name,?int?index)?{??
  12. ????????this.name?=?name;??
  13. ????????this.index?=?index;??
  14. ????}??
  15. //接口方法??
  16. ????@Override??
  17. ????public?String?getInfo()?{??
  18. ????????return?this.name;??
  19. ????}??
  20. ????//接口方法??
  21. ????@Override??
  22. ????public?void?print()?{??
  23. ????????System.out.println(this.index+":"+this.name);??
  24. ????}??
  25. }??

?

用法六:使用接口组织枚举

?

Java代码
  1. public?interface?Food?{??
  2. ????enum?Coffee?implements?Food{??
  3. ????????BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO??
  4. ????}??
  5. ????enum?Dessert?implements?Food{??
  6. ????????FRUIT,?CAKE,?GELATO??
  7. ????}??
  8. }??

?

用法七:关于枚举集合的使用

java.util.EnumSet和java.util.EnumMap是两个枚举集合。EnumSet保证集合中的元素不重复;EnumMap中的 key是enum类型,而value则可以是任意类型。关于这个两个集合的使用就不在这里赘述,可以参考JDK文档。

用法八:带抽象方法的枚举

public enum TrafficLamp{
RED(30){
   public TrafficLamp nextLamp(){
return GREEN;
}
},
GREEN(45){
public TrafficLamp nextLamp(){
return YELLOW;
}
},
YELLOW(5){
public TrafficLamp nextLamp(){
return RED;
}
};
public abstract TrafficLamp nextLamp();
private int time;
private TrafficLamp(int time){this.time=time;}
}

?

发表评论
用户名: 匿名