Java中的枚举
在java1.5之前,java并不支持枚举数据类型,在JDK1.5,引入了一种新的数据类型–枚举类型(Enumerated Type),使用emun关键字进行标识;
常见的枚举定义方法
在枚举类型中,一般的定义方法如下:enum 枚举名 { 枚举值表};
如:enum WeekDay{ Mon,Tue,Wed,Thu,Fri,Sat,Sun;}
枚举还有一些其他定义方法:enum WeekDay{ Mon,Tue,Wed,Thu,Fri,Sat,Sun;} //先定义
enum WeekDay a,b,c //后说明
或者为:enum WeekDay{ Mon,Tue,Wed,Thu,Fri,Sat,Sun;} a,b,c //定义的同时说明
或者为:enum { Mon,Tue,Wed,Thu,Fri,Sat,Sun;} a,b,c //直接说明,即定义无名枚举
在程序中使用枚举
public enum myColor { 红色, 绿色,蓝色; }
public static void main(String[] args) {
myColor c1 = myColor.红色;
System.out.println(c1);
myColor c2 = myColor.绿色;
System.out.println(c2);
myColor c3 = myColor.蓝色;
System.out.println(c3);
}
程序运行结果:
在switch语句中使用枚举
public enum myColor { 红色, 绿色,蓝色; }
public static void main(String[] args) {
myColor c1 = myColor.红色;
switch (c1) {
case 红色: {
System.out.println("我是红色");
break;
}
case 绿色: {
System.out.println("我是绿色");
break;
}
case 蓝色: {
System.out.println("我是蓝色");
break;
}
}
}
枚举类
枚举类是java.lang包下定义的一个公共类,它的作用是用来构造新的枚举类型。它是JDK1.5之后推出的一个新的类,用来弥补关于枚举这一常用集合在Java中的不足。
在Enum类下定义了十多种方法,每一种方法都是对Enum创建的枚举对象实施操作,下面列举了Enum类的常用方法:
- 通过values()方法得到对象取值
public class ValueOfEnum {
public static void main(String[] args) {
myColor[] allColor = myColor.values();
for (myColor aColor : allColor) {
System.out.println(aColor);
}
}
}
2. 通过调用Enum类中的ordinal()方法,输出枚举类型的每一个对象的编号
public class ValueOfEnum {
public static void main(String[] args) {
myColor[] allColor = myColor.values();
for (myColor aColor : allColor) {
System.out.println(aColor.name() + "---->" + aColor.ordinal());
}
}
}
3. 调用Enum类中的valueOf()方法,这是一个静态方法,第一个参数是myColor.class,用来返回枚举类型,第二个参数是字符串常量“红色”,这个参数必须在与该枚举类中声明枚举值时所用的标识符完全匹配,不允许使用额外的空白字符;
public class ValueOfEnum {
public static void main(String[] args) {
myColor c=myColor.valueOf(myColor.class,"红色");
System.out.println(c);
}
}
类集对枚举的支持
使用EnumMap操作枚举类中的实例
public class EnumMapDemo {
public static void main(String[] args) {
//EnumMap的使用
EnumMap<myColor, String> eMap = new EnumMap(myColor.class);
eMap.put(myColor.红色, "RED");
eMap.put(myColor.绿色, "GREEN");
eMap.put(myColor.蓝色, "BLUE");
for (Map.Entry<myColor, String> me : eMap.entrySet()) {
System.out.println(me.getKey() + "--->" + me.getValue());
}
}
}
使用EnumSet中的静态方法allOf()操作枚举类中的实例
public class EnumMapDemo {
public static void main(String[] args) {
//EnumSet的使用
EnumSet<myColor> eSet = EnumSet.allOf(myColor.class);
Iterator<myColor> iter = eSet.iterator();
while (iter.hasNext()) {
System.out.println(iter.next());
}
}
}
枚举的接口
创建枚举接口
public interface ColorEnum {
public String getColor();
}
使用枚举实现该接口
enum NewColor2 implements ColorEnum {
红色 {
public String getColor() {
return "RED";
}
},
绿色 {
public String getColor() {
return "GREEN";
}
},
蓝色 {
public String getColor() {
return "BLUE";
}
};
}
通过代码测试上面实现的接口类型
public class TestColor {
public static void main(String[] args) {
for (NewColor2 c : NewColor2.values()) {
System.out.println(c.ordinal() + "-->" + c.name() + ":" + c.getColor());
}
}
}
在枚举类中定义抽象方法
public enum NewColor3 {
红色 {
public String getColor() {
return "RED";
}
},
蓝色 {
public String getColor() {
return "GREEN";
}
},
绿色 {
public String getColor() {
return "BLUE";
}
};
public abstract String getColor();
}
测试,运行结果
public class TestColor {
public static void main(String[] args) {
for (NewColor3 c:NewColor3.values()){
System.out.println(c.ordinal()+"-->"+c.name()+":"+c.getColor());
}
}
}
上面两种方式的运行结果是一样的,所不同的是,抽象方法getColor()可以直接在枚举中定义,这个抽象方法需要在枚举对象“红色,绿色,蓝色”中一一给予单独实现,否则会编译出错。