一、简介
JDK1.5引入了新的类型——枚举。使用enum关键字。枚举enum是和class,interface同一级别的特性。可以把enum看作一个抽象类,但是它又有它的不同之处,enum不能被继承。
二、使用
1、定义
public enum TestEnum {
MON, TUE, WED, THU, FRI, SAT, SUN;
}
这段代码实际上内部调用了7次 Enum(String name, int ordinal):
new Enum<TestEnum>("MON",0);
new Enum<TestEnum>("TUE",1);
new Enum<TestEnum>("WED",2);
<1> 遍历操作
for (TestEnum e : TestEnum.values()) {
System.out.println(e.toString());
}
<2> switch操作
TestEnum day = TestEnum.MON;
switch (day) {
case MON:
System.out.println("今天是星期一");
break;
case TUE:
System.out.println("今天是星期二");
break;
// ... ...
default:
System.out.println(day);
break;
}
2、enum 对象的常用方法
int compareTo(E o) : 比较此枚举与指定对象的顺序。
Class<E> getDeclaringClass() : 返回与此枚举常量的枚举类型相对应的 Class 对象。
String name() : 返回此枚举常量的名称,在其枚举声明中对其进行声明。
int ordinal() : 返回枚举常量的序数(它在枚举声明中的位置,其中初始常量序数为零)。
String toString() : 返回枚举常量的名称,它包含在声明中。
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name) : 返回带指定名称的指定枚举类型的枚举常量。
3、自定义属性和方法
public enum Color {
RED("红色", 1), GREEN("绿色", 2), BLANK("白色", 3), YELLO("黄色", 4);
// 成员变量
private String name;
private int index;
// 构造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getNameByIndex(int index) {
for (Color c : Color.values()) {
if (c.getIndex() == index) {
return c.name;
}
}
return null;
}
// get set 方法
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
4、EnumSet,EnumMap 的应用
public class Test {
public static void main(String[] args) {
// EnumSet的使用
EnumSet<TestEnum> weekSet = EnumSet.allOf(TestEnum.class);
for (TestEnum day : weekSet) {
System.out.println(day);
}
// EnumMap的使用
EnumMap<TestEnum, String> weekMap = new EnumMap(TestEnum.class);
weekMap.put(TestEnum.MON, "星期一");
weekMap.put(TestEnum.TUE, "星期二");
// ... ...
for (Iterator<Entry<TestEnum, String>> iter = weekMap.entrySet().iterator(); iter.hasNext();) {
Entry<TestEnum, String> entry = iter.next();
System.out.println(entry.getKey().name() + ":" + entry.getValue());
}
}
}