枚舉類(lèi)型是JDK1.5引入的新類(lèi)型,雖然現(xiàn)在都1.8+了,總結(jié)一下枚舉的類(lèi)型,先看兩個(gè)簡(jiǎn)單的例子
- 例子
public enum Color {
RED, GREEN, BLANK, YELLOW
}
public enum Color {
RED("紅色", 1), GREEN("綠色", 2), BLANK("白色", 3), YELLO("黃色", 4);
// 成員變量
private String name;
private int index;
// 構(gòu)造方法
private Color(String name, int index) {
this.name = name;
this.index = index;
}
// 普通方法
public static String getName(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;
}
}
其實(shí)enum申明定義的就是一個(gè)特殊的class,這些類(lèi)都是Enum類(lèi)的子類(lèi)(java.lang.Enum<E>),代碼編譯之后,會(huì)把enum申明的類(lèi)單獨(dú)編譯成一個(gè).class的字節(jié)碼文件。
-
特征及其用法
枚舉類(lèi)是一個(gè)不可被繼承的final 類(lèi),枚舉值都是靜態(tài)常量。
既然是一個(gè)類(lèi),那就應(yīng)該有構(gòu)造器,方法,數(shù)據(jù)域,但是枚舉類(lèi)有些特別,它的構(gòu)造方法必須是私有(private)的,構(gòu)造器只是在構(gòu)造枚舉值的時(shí)候被調(diào)用。- 繼承的Enum的方法
(1) ordinal()方法: 返回枚舉值在枚舉類(lèi)種的順序。這個(gè)順序根據(jù)枚舉值聲明的順序而定。
- 繼承的Enum的方法
Color.RED.ordinal(); //返回結(jié)果:0
Color.BLUE.ordinal(); //返回結(jié)果:1
(2) compareTo()方法: Enum實(shí)現(xiàn)了java.lang.Comparable接口,因此可以比較象與指定對(duì)象的順序。Enum中的compareTo返回的是兩個(gè)枚舉值的順序之差。當(dāng)然,前提是兩個(gè)枚舉值必須屬于同一個(gè)枚舉類(lèi),否則會(huì)拋出ClassCastException()異常。(具體可見(jiàn)源代碼)
Color.RED.compareTo(Color.BLUE); //返回結(jié)果 -1
(3) values()方法: 靜態(tài)方法,返回一個(gè)包含全部枚舉值的數(shù)組。
Color[] colors=Color.values();
for(Color c:colors){
System.out.print(c+",");
}//返回結(jié)果:RED,BLUE,BLACK YELLOW,GREEN,
(4) toString()方法: 返回枚舉常量的名稱(chēng)。
Color c=Color.RED;
System.out.println(c);//返回結(jié)果: RED
(5) valueOf()方法: 這個(gè)方法和toString方法是相對(duì)應(yīng)的,返回帶指定名稱(chēng)的指定枚舉類(lèi)型的枚舉常量。
Color.valueOf("BLUE"); //返回結(jié)果: Color.BLUE
(6) equals()方法: 比較兩個(gè)枚舉類(lèi)對(duì)象的引用。
public final boolean equals(Object other) {
return this==other;
}