枚举
所有的枚举类型隐性地继承自 java.lang.Enum。枚举实质上还是类!而每个被枚举的成员实质就是一个枚举类型的实例,他们默认都是public static final修饰的。可以直接通过枚举类型名使用它们。
enum 枚举名 {枚举体(常量列表)}
枚举的构造方法
在枚举中可以直接定义构造方法,但一旦构造方法定义之后,则所有的枚举对象都必须明确地调用此构造方法。
定义枚举的构造方法:public enum Color{RED("红色"),GREEN("绿色"),BLUE("蓝色");private String name;Color(String name){this.name=name;}public void setName(String name){this.name=name;}public String getName(){return name;}}for (Color c : Color.values()){System.out.println(c.ordinal()+"-"+c.name());}System.out.println(Arrays.toString(Color.values()));0-RED1-GREEN2-BLUE[红色, 绿色, 蓝色]
枚举的接口
当一个枚举实现一个接口之后,各个枚举对象都必须分别实现接口中的抽象方法。
public interface info{public String getColor();}// 方法一public enum Color implements info{RED("红色"),GREEN("绿色"),BLUE("蓝色");private String name;Color(String name){this.name=name;}public String getColor(){return this.name;}}// 方法二public enum Color implements info{RED{public String getColor(){return "红色";}},GREEN{public String getColor(){return "绿色";}},BLUE{public String getColor(){return "蓝色";}};}
枚举中的抽象方法
在一个枚举中裤直接定义一个或者多个抽象方法。
注:枚举中的每个对象都必须单独地实现这些抽象方法。
public enum Color{RED{public String getColor(){return "红色";}},GREEN{public String getColor(){return "绿色";}},BLUE{public String getColor(){return "蓝色";}};public abstract String getColor();}
switch上的使用
Color c=Color.RED;switch(c){case RED:System.out.println("这是红色!");break;case GREEN:System.out.println("这是绿色!");break;case BLUE:System.out.println("这是蓝色!");break;}// output:这是红色!
类集对枚举的支持
EnumMap
EnumMap是Map接口的子类,操作形式与Map一致。
可以通过调用EnumMap的方法来实现对于对象的控制。
使用EnumMap操作类:enum Color{RED,GREEN,BLUE;}EnumMap<Color,String> em = new EnumMap<Color,String>(Color.class);em.put(Color.RED,"红色");em.put(Color.GREEN,"绿色");em.put(Color.BLUE,"蓝色");for(Map.Entry<Color,String>me : em.entrySet()){System.out.println(me.getKey()+"-->"+me.getValue())}
EnumSet
EnumSet是Set接口的子类,但是在此类中并没有任何的构造方法定义,表示构造方法被私有化。
同时,所有对于此类的方法的操作均是静态操作。
测试EnumSet的静态方法:enum Color{RED,GREEN,BLUE;}EnumSet<Color> es = new EnumSet.allOf(Color.class); //表示将全部内容设置到集合/*EnumSet<Color> es = new EnumSet.noneOf(Color.class); //表示此类型的空集合*/Iterator<Color> it = es.iterator();while(it.hasNext()){System.out.println(it.next());}
