- 若是要定義一個枚舉類:
public enum Size { SAMLL, MEDIUM, LARGE, EXTRA, EXTRA_LARGE};
- 實際上,這個聲明定義的類型是一個類,它恰好有4個實例,在此儘可能不要構造新對象。
- 所以,在比較兩個枚舉類型的值時,永遠不須要調用equals,而直接使用「==」就能夠了。
- 若是須要的話,能夠在枚舉類型中添加一些構造器、方法和域。固然,構造器知識在構造枚舉常量的時候被調用。下面是一個示例:
public enum Size
{
SMALL("S"), MEDIUM("M"), LARGE("L"),EXTRA_LARGE("XL");
private String abbreviation;
private Size(String abbreviation) {this.abbreviation = abbreviation;}
public String getAbbrevation() {return abbrevation;}
}
- 全部的枚舉類型都是Enum類的子類。它們繼承了這個類的許多方法,其中最有用的一個是toString,這個方法可以返回枚舉常量名。例如,Size.SMALL.toString()將返回字符串"SMALL".
toString的逆方法是靜態方法valueOf。例如,語句:
Size s = Enum.valueOf(Size.class, "SMALL");
將s設置爲Size.SMALL.數組
- 每一個枚舉類型都有一個靜態的value方法,它將返回一個包含所有枚舉值的數組,並且該數組中的元素嚴格保持其在enum中聲明的順序,所以你能夠在循環中使用values返回的數組。例如,以下調用:
Size[] values = Size.values();
返回包含元素Size.SMALL, Size.MEDIUM,Size.LARGE和Size.EXTRA_LARGE的數組。this
- ordinal方法返回enum聲明中枚舉常量的位置,位置從0開始計數。例如,Size.MEDIUM.ordinal()返回1.
- 能夠向enum中添加方法。若是打算定義本身的方法,那麼必須在enum序列化的最後添加一個分號。同時,Java要求你必須先定義enum實例。若是在定義enum實例以前定義了任何方法或屬性,那麼在編譯時就會獲得錯誤。
- enum中構造器與普通方法沒有什麼區別,由於有少量限制以外,enum就是普通的類。因此,咱們可使用enum作許多事情。
- 通常將enum的構造器聲明爲private,但對於它的訪問屬性而言,並無什麼實質性的變化,由於(即便不聲明爲private)咱們只能在enum定義的內部使用期構造器建立enum實例。一旦enum定義結束,編譯器就不容許咱們在使用其構造器來建立任何實例楽