中秋佳节--理解Enum枚举
一.Enum枚举的作用
1.使用枚举可以限定取值范围,枚举中定义的每个常量都可以理解为对象;
Eg:
Public enum Color{ RED, GREEN,BULE; }
说明:RED实际上就表示的是枚举的名称,默认的编号是0,可以使用ordinal()方法获得。
2.使用enum关键字定义枚举类,其中包含的对象可以初始化定义(初始化构造函数)
Eg:
package cn.test.java.enums; enum ColorDemo{ RED("红色"),GREEN("绿色"),BLUE("蓝色"); private String name; private ColorDemo(String name){ this.setName(name); } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } } public class ConstructorEnum { public static void main(String[] args) { for(ColorDemo c : ColorDemo.values()){ System.out.println(c.ordinal()+"--->"+c.name()+"("+c.getName()+")"); } } }
说明:在枚举类中定义属性及自己的构造方法,但是一旦定义有参数构造之后,在声明枚举对象的时候,就必须明确的调用构造方法,并进行传递参数。
3.在枚举中实际上已经实现好Comparable接口,所以枚举中的内容是可以排序的;
Eg:
package cn.test.java.enums; enum ColorDemo{ RED("红色"),GREEN("绿色"),BLUE("蓝色"); private String name; private ColorDemo(String name){ this.setName(name); } public void setName(String name){ this.name = name; } public String getName(){ return this.name; } } public class ConstructorEnum { public static void main(String[] args) { for(ColorDemo c : ColorDemo.values()){ System.out.println(c.ordinal()+"--->"+c.name()+"("+c.getName()+")"); } } }
二.EnumMap 和EnumSet的使用
EnumMap是Map类的子类,所以它的所有方法都是从Map类中继承过来的,使用方法如下
Eg:
package cn.test.java.enums; import java.util.EnumMap; import java.util.Map; public class EunmMapDemo { public static void main(String[] args) { Map<Color,String> desc = null; desc = new EnumMap<Color,String>(Color.class); desc.put(Color.blus,"蓝色"); desc.put(Color.green,"绿色"); desc.put(Color.red,"红色"); System.out.println("===输出全部内容"); for(Color c : Color.values()){ System.out.println(c.name()+"--->"+desc.get(c)); } System.out.println("===输出全部键"); for(Color c: desc.keySet()){ System.out.println(c.name()+"、"); } System.out.println(); System.out.println("=== 输出全部值"); for(String s:desc.values()){ System.out.println(s+"、"); } } }
EnumSet类是Set类中的子类,它使用方法中都是以静态形式继续该类方法
Eg:
package cn.test.java.enums; import java.util.EnumSet; public class EunmSetDemo { public static void main(String args[]){ EnumSet<Color> es = null ; // 声明一个EnumSet对象 System.out.println("===EnumSet.allOf(Color.class) =====") ; es = EnumSet.allOf(Color.class) ; // 将枚举的全部类型设置到EnumSet对象之中 print(es) ; } public static void print(EnumSet<Color> temp){ // 专门的输出操作 for(Color c:temp){ // 循环输出EnumSet中的内容 System.out.print(c + "、") ; } System.out.println() ; } };
三.枚举类的其他使用
1.枚举类型可以跟普通类一样实现接口,从但是实现接口的时候 要求枚举中的每个对象都必须单独覆写接口中的抽象方法。
Eg:
package cn.test.java.enums; interface Print{ public String getColor(); } enum Colors implements Print{ RED{ public String getColor(){ return "红色"; } }, GREEN{ public String getColor(){ return "绿色"; } }, BLUS{ public String getColor(){ return "蓝色"; } }; } public class InterfaceEunmDemo { public static void main(String[] args) { for(Colors c:Colors.values()){ System.out.println(c.getColor()+"、"); } } }
2.枚举类中定义了抽象方法,但是要求枚举中的每个对象都分别实现此抽象方法。
Eg:
package cn.test.java.enums; enum ColorDemo2 implements Print{ RED{ public String getColor(){ return "红色"; } }, GREEN{ public String getColor(){ return "绿色"; } }, BLUS{ public String getColor(){ return "蓝色"; } }; } public class AbstractMethodEunm { public static void main(String[] args) { for(ColorDemo2 c: ColorDemo2.values()){ System.out.println(c.getColor()+"、"); } } }