枚举

所有的枚举类型隐性地继承自 java.lang.Enum。枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的。可以直接通过枚举类型名使用它们。

  1. enum 枚举名 {
  2. 枚举体(常量列表)
  3. }

枚举的构造方法

在枚举中可以直接定义构造方法,但一旦构造方法定义之后,则所有的枚举对象都必须明确地调用此构造方法。

  1. 定义枚举的构造方法:
  2. public enum Color{
  3. RED("红色"),GREEN("绿色"),BLUE("蓝色");
  4. private String name;
  5. Color(String name){
  6. this.name=name;
  7. }
  8. public void setName(String name){
  9. this.name=name;
  10. }
  11. public String getName(){
  12. return name;
  13. }
  14. }
  15. for (Color c : Color.values()){
  16. System.out.println(c.ordinal()+"-"+c.name());
  17. }
  18. System.out.println(Arrays.toString(Color.values()));
  19. 0-RED
  20. 1-GREEN
  21. 2-BLUE
  22. [红色, 绿色, 蓝色]

枚举的接口

当一个枚举实现一个接口之后,各个枚举对象都必须分别实现接口中的抽象方法。

  1. public interface info{
  2. public String getColor();
  3. }
  4. // 方法一
  5. public enum Color implements info{
  6. RED("红色"),GREEN("绿色"),BLUE("蓝色");
  7. private String name;
  8. Color(String name){
  9. this.name=name;
  10. }
  11. public String getColor(){
  12. return this.name;
  13. }
  14. }
  15. // 方法二
  16. public enum Color implements info{
  17. RED{
  18. public String getColor(){return "红色";}
  19. },
  20. GREEN{
  21. public String getColor(){return "绿色";}
  22. },
  23. BLUE{
  24. public String getColor(){return "蓝色";}
  25. };
  26. }

枚举中的抽象方法

在一个枚举中裤直接定义一个或者多个抽象方法。
注:枚举中的每个对象都必须单独地实现这些抽象方法。

  1. public enum Color{
  2. RED{
  3. public String getColor(){return "红色";}
  4. },
  5. GREEN{
  6. public String getColor(){return "绿色";}
  7. },
  8. BLUE{
  9. public String getColor(){return "蓝色";}
  10. };
  11. public abstract String getColor();
  12. }

switch上的使用

  1. Color c=Color.RED;
  2. switch(c){
  3. case RED:
  4. System.out.println("这是红色!");
  5. break;
  6. case GREEN:
  7. System.out.println("这是绿色!");
  8. break;
  9. case BLUE:
  10. System.out.println("这是蓝色!");
  11. break;
  12. }
  13. // output:
  14. 这是红色!

类集对枚举的支持

EnumMap

EnumMap是Map接口的子类,操作形式与Map一致。
可以通过调用EnumMap的方法来实现对于对象的控制。

  1. 使用EnumMap操作类:
  2. enum Color{
  3. RED,GREEN,BLUE;
  4. }
  5. EnumMap<Color,String> em = new EnumMap<Color,String>(Color.class);
  6. em.put(Color.RED,"红色");
  7. em.put(Color.GREEN,"绿色");
  8. em.put(Color.BLUE,"蓝色");
  9. for(Map.Entry<Color,String>me : em.entrySet()){
  10. System.out.println(me.getKey()+"-->"+me.getValue())
  11. }

EnumSet

EnumSet是Set接口的子类,但是在此类中并没有任何的构造方法定义,表示构造方法被私有化。
同时,所有对于此类的方法的操作均是静态操作。

  1. 测试EnumSet的静态方法:
  2. enum Color{
  3. RED,GREEN,BLUE;
  4. }
  5. EnumSet<Color> es = new EnumSet.allOf(Color.class); //表示将全部内容设置到集合
  6. /*
  7. EnumSet<Color> es = new EnumSet.noneOf(Color.class); //表示此类型的空集合
  8. */
  9. Iterator<Color> it = es.iterator();
  10. while(it.hasNext()){
  11. System.out.println(it.next());
  12. }