枚舉定義:
一組具名的值的有限集合证杭。
一田度、枚舉的基本特性
當(dāng)創(chuàng)建枚舉類enum時(shí),編譯器會(huì)生成一個(gè)類解愤,這個(gè)類繼承與java.lang.Enum镇饺。
不能繼承一個(gè)枚舉。
1送讲、枚舉里面的方法
a奸笤、values()
按順序返回所有的枚舉值惋啃。
values()方法是有編譯器添加的static方法。編譯器還添加了valueOf()方法监右。
Enum中valueof 需要兩個(gè)參數(shù)边灭,而編譯器自己添加的這個(gè)valueof只需要一個(gè)參數(shù)。
由于values()方法是有編譯器插入到enum定義的static方法健盒,所以存筏,如果將enum實(shí)例向上轉(zhuǎn)型為Enum,那么values()方法就不可訪問(wèn)味榛,不過(guò)在Class中有一個(gè)getEnumConstants()方法,所以即便Enum接口中沒有values()方法予跌,我們?nèi)匀豢梢酝ㄟ^(guò)Class對(duì)象取得所有enum實(shí)例搏色。
b、valueof(String name)
根據(jù)名稱返回該枚舉
c券册、valueOf(Class<T> enumType频轿,String name)
返回特定枚舉名稱和枚舉類型的枚舉
d、name()
返回該枚舉的名稱
二烁焙、如何有效的使用枚舉
1航邢、在接口中對(duì)枚舉進(jìn)行分組
由于無(wú)法從enum繼承子類,當(dāng)我們想擴(kuò)展原enum中的元素時(shí)骄蝇,希望對(duì)enum中的元素進(jìn)行分組膳殷。
這時(shí)候我們可以在接口內(nèi)部,創(chuàng)建該實(shí)現(xiàn)該接口的枚舉九火,以此將元素進(jìn)行分組赚窃,可以達(dá)到將美劇元素分組的目的。
2岔激、EnumSet
enum可以算是一種集合勒极,但是它不能去動(dòng)態(tài)的增加或是刪除元素。
EnumSet算是對(duì)該特點(diǎn)的補(bǔ)充虑鼎,因?yàn)閑num里面的元素也都是唯一的辱匿,Set集合中的元素也都是唯一的。
EnumSet中的元素必須來(lái)自某種enum.
EnumSet.allOf(Color.class);創(chuàng)建包含某種enum 所有元素的set集合
EnumSet.of(Color.BLACK) 創(chuàng)建包含某種enum 下 某一個(gè)元素的集合炫彩。
3匾七、EnumMap
EnumMap是一種特殊的Map,它要求其中的鍵必須來(lái)自一個(gè)enum江兢,由于enum本身的限制乐尊,所以EnumMap在內(nèi)部可有數(shù)組實(shí)現(xiàn)。