一個(gè)枚舉類型的典型例子:
?public enum Size{ SMALL, MEDIUM, LARGE, EXTRA_LARGE};
實(shí)際上昼丑,這個(gè)聲明定義的類型是一個(gè)類呻逆,它剛好有 4 個(gè)實(shí)例,不可能構(gòu)造新的對象矾克。
因此页慷,在比較兩個(gè)枚舉類型的值時(shí)憔足,并不需要調(diào)用 equals胁附,直接使用 “==” 就可以了。
如果需要的話滓彰,可以為枚舉類型增加構(gòu)造器控妻、方法和字段。當(dāng)然揭绑,構(gòu)造器只是在構(gòu)造枚舉常量的時(shí)候調(diào)用弓候。下面是一個(gè)示例:
enum Size{
SMALL("S", 0), MEDIUM("M", 1), LARGE("L", 2), EXTRA_LARGE("XL", 3);
private String abbreviation;
private int index;
private Size(String abbreviation, int index) {
this.abbreviation = abbreviation;
this.index = index;
}
public String getAbbreviation() {
return abbreviation;
}
public void setAbbreviation(String abbreviation) {
this.abbreviation = abbreviation;
}
public int getIndex() {
return index;
}
public void setIndex(int index) {
this.index = index;
}
}
public class Testing {
public static void main(String[] args) {
Size size = Enum.valueOf(Size.class, "EXTRA_LARGE");
System.out.println("Size = " + size.toString());
System.out.println("abbreviation = " + size.getAbbreviation());
System.out.println("index = " + size.getIndex());
System.out.println("ordinal = " + size.ordinal());
if(size == Size.EXTRA_LARGE) {
System.out.println("Good job you paid attention to the _.");
}
}
}
輸出:
Size = EXTRA_LARGE
abbreviation = XL
index = 4
ordinal = 3
Good job you paid attention to the _.
枚舉的構(gòu)造器總是私有的∷耍可以省略 private 修飾符菇存。如果聲明一個(gè) enum 構(gòu)造器為 public 和 protected,會出現(xiàn)語法錯(cuò)誤邦蜜。
所有的枚舉類型都是 Enum 類的子類依鸥。它們繼承了這個(gè)類的許多方法。其中最有用的一個(gè)是 toString悼沈,這個(gè)方法會返回枚舉常量名姐扮。例如衣吠,Size.SMALL.toString()
將返回字符串 “SMALL”。
toString 的逆方法是靜態(tài)方法 valueOf惊搏。 例如袍榆,語句:
?Size s = Enum.valueOf(Size.class, "SMALL");
將 s 設(shè)置成 Size.SMALL。
每個(gè)枚舉類型都有一個(gè)靜態(tài)的 values 方法包雀,它將返回一個(gè)包含全部枚舉值的數(shù)組才写。
Size[] arr = Size.values();
System.out.println(Arrays.toString(arr));
打釉薏荨:
?[SMALL, MEDIUM, LARGE, EXTRA_LARGE]
ordinal 方法返冋 enum 聲明中枚舉常量的位置厨疙,位置從 0 開始計(jì)數(shù)沾凄。例如:Size.MEDIUM.ordinal()
返回 1撒蟀。
注釋: Enum 類有一個(gè)類型參數(shù)保屯,不過為了簡單起見省略了這個(gè)類型參數(shù)姑尺。例如,實(shí)際上枚舉類型 Size 擴(kuò)展了 Enum<Size>
统捶。類型參數(shù)會在 compareTo 方法中使用歧杏。
java.long.Enmu<E> 5.0
- static Enmu valueOf(Calss enumClass, String name)
返回給定類中指明名字的枚舉常量犬绒。
- String toString()
返回枚舉常量名兑凿。
- int ordinal()
返回枚舉常量在 enum 聲明中的位置,位置從 0 開始計(jì)數(shù)咐鹤。
- int compareTo(E other)
如果枚舉常量出現(xiàn)在 other 之前祈惶,則返回一個(gè)負(fù)值捧请;如果 this==other疹蛉,則返回 0力麸;否則克蚂,返回正整數(shù)陨舱。枚舉常量的出現(xiàn)次序在 enum 聲明中給出游盲。