黑马程序员技术交流社区

标题: Java枚举的七种常见用法 [打印本页]

作者: 高境    时间: 2013-1-7 12:52
标题: Java枚举的七种常见用法
枚举在Java开发中给开发者带来了很大的方便,本文将给大家介绍Java枚举七种常见的用法

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

用法一:常量

在JDK1.5 之前,我们定义常量都是: public static fianl.... 。现在好了,有了枚举,可以把相关的常量分组到一个枚举类型里,而且枚举提供了比常量更多的方法。
  1. public enum Color
  2. {   
  3. RED, GREEN, BLANK, YELLOW  
  4. }
复制代码

用法二:switch


JDK1.6之前的switch语句只支持int,char,enum类型,使用枚举,能让我们的代码可读性更强。
  1. enum Signal
  2. {      
  3.   GREEN, YELLOW, RED  
  4. }  
  5. public class TrafficLight
  6. {      
  7. Signal color = Signal.RED;
  8. public void change()
  9. {         
  10. switch (color)
  11. {         
  12. case RED:              
  13. color = Signal.GREEN;              
  14. break;         
  15. case YELLOW:              
  16. color = Signal.RED;              
  17. break;         
  18. case GREEN:            
  19. color = Signal.YELLOW;              
  20. break;         
  21. }      
  22. }  
  23. }
复制代码
用法三:向枚举中添加新方法

如果打算自定义自己的方法,那么必须在enum实例序列的最后添加一个分号。而且 Java 要求必须先定义 enum 实例。
  1. public enum Color
  2. {      
  3. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
  4. // 成员变量      
  5. private String name;      
  6. private int index;
  7. // 构造方法      
  8. private Color(String name, int index)
  9. {         
  10. this.name = name;         
  11. this.index = index;      
  12. }      
  13. // 普通方法      
  14. public static String getName(int index)
  15. {         
  16. for (Color c : Color.values())
  17. {              
  18. if (c.getIndex() == index)
  19. {                  
  20. return c.name;              
  21. }         
  22. }         
  23. return null;     
  24. }      
  25. // get set 方法     
  26. public String getName()
  27. {         
  28. return name;      
  29. }      
  30. public void setName(String name)
  31. {         
  32. this.name = name;      
  33. }      
  34. public int getIndex()
  35. {         
  36. return index;      
  37. }      
  38. public void setIndex(int index)
  39. {         
  40. this.index = index;      
  41. }  
  42. }
复制代码
用法四:覆盖枚举的方法

下面给出一个toString()方法覆盖的例子。
  1. public enum Color
  2. {      
  3. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);      
  4. // 成员变量      
  5. private String name;      
  6. private int index;      
  7. // 构造方法      
  8. private Color(String name, int index)
  9. {         
  10. this.name = name;         
  11. this.index = index;      
  12. }      
  13. //覆盖方法      
  14. @Override     
  15. public String toString()
  16. {         
  17. return this.index+"_"+this.name;      
  18. }  
  19. }
复制代码

用法五:实现接口


所有的枚举都继承自java.lang.Enum类。由于Java 不支持多继承,所以枚举对象不能再继承其他类。
  1. public interface Behaviour
  2. {      
  3. void print();      
  4. String getInfo();  
  5. }  
  6. public enum Color implements Behaviour
  7. {      
  8. RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);      
  9. // 成员变量      
  10. private String name;     
  11. private int index;      
  12. // 构造方法      
  13. private Color(String name, int index)
  14. {         
  15. this.name = name;         
  16. this.index = index;      
  17. }  
  18. //接口方法      
  19. @Override     
  20. public String getInfo()
  21. {         
  22. return this.name;     
  23. }      
  24. //接口方法      
  25. @Override     
  26. public void print()
  27. {         
  28. System.out.println(this.index+":"+this.name);      
  29. }  
  30. }
复制代码
用法六:使用接口组织枚举
  1. public interface Food
  2. {      
  3. enum Coffee implements Food
  4. {         
  5. BLACK_COFFEE,DECAF_COFFEE,LATTE,CAPPUCCINO      
  6. }      
  7. enum Dessert implements Food
  8. {         
  9. FRUIT, CAKE, GELATO      
  10. }  
  11. }
复制代码
用法七:关于枚举集合的使用

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



作者: 焦健    时间: 2013-1-7 13:37
谢版主分享,学习了。。
作者: 何竹冬    时间: 2013-1-7 13:59
讲的很详细,学习了。
作者: Fateˉ似命守护    时间: 2013-1-7 15:12
{:soso_e179:}
作者: 李奇    时间: 2013-1-7 19:14
{:soso_e179:}哎呦不错哦
作者: 冉世友    时间: 2013-1-7 21:15
嗯,讲得真详细,认真mark学习!
作者: 高境    时间: 2013-1-10 12:03
{:soso_e200:}
作者: 黄嵘才    时间: 2013-1-10 17:31
信息量好大啊。我需要跑步前进了。
作者: 曹佳佳    时间: 2013-1-11 09:13
{:soso_e179:}
作者: 曹佳佳    时间: 2013-1-11 09:13
{:soso_e179:}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2