首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

Java 枚举七常见种用法

2012-09-25 
Java 枚举7常见种用法?转自:http://helloyesyes.iteye.com/blog/1186575#commentsDK1.5引入了新的类型——枚

Java 枚举7常见种用法

?

转自:http://helloyesyes.iteye.com/blog/1186575#comments

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

用法一:常量

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

?

Java代码
  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文档。

关于枚举的实现细节和原理请参考:

?

热点排行