枚舉其實(shí)是個特殊的 Java 類,創(chuàng)建枚舉需用enum關(guān)鍵字,枚舉類都是java.lang.Enum的子類,java.lang.Enum是一個抽象類,枚舉類型符合通用類型模式Class Enum<E extends Enum<E>>,這里的 E 表示枚舉類型的名稱,枚舉類的每個值都會映射到protected Enum(String name, int ordinal)構(gòu)造函數(shù)中,每個值(如NumEnum中的ONE)的名稱都被轉(zhuǎn)成字符串, ordinal 表示被創(chuàng)建的順序(默認(rèn)是0,1,2,3...)。
枚舉類enum定義如下:
enum NumEnum{
ONE,TWO,THREE,FOUR
}
實(shí)際上是調(diào)用了如下方法:
new Enum<NumEnum>("ONE",0);
new Enum<NumEnum>("TWO",1);
new Enum<NumEnum>("THREE",2);
new Enum<NumEnum>("FOUR",3);
常用方法如下:
//比較此枚舉與指定對象的順序
int compareTo(E o)
//返回與此枚舉常量的枚舉類型相對應(yīng)的 Class 對象
Class<E> getDeclaringClass()
//返回此枚舉常量的名稱
String name()
//返回枚舉常量的序數(shù)(它在枚舉聲明中的位置,其中初始常量序數(shù)為零)
int ordinal()
// 返回枚舉常量的名稱
String toString()
//返回帶指定名稱的指定枚舉類型的枚舉常量
static <T extends Enum<T>> T valueOf(Class<T> enumType, String name)
NumEnum調(diào)用常用方法如下:
System.out.println(NumEnum.ONE.compareTo(NumEnum.FOUR));// -3
System.out.println(NumEnum.ONE.getDeclaringClass());//class com.jeeno.test.NumEnum
System.out.println(NumEnum.TWO.name());//TWO
System.out.println(NumEnum.THREE.ordinal());//2
System.out.println(NumEnum.THREE.toString());//THREE
System.out.println(NumEnum.ONE.valueOf("FOUR"));//FOUR
實(shí)際上enum就是一個class,只不過 Java 編譯器幫我們做了語法的解析和編譯而已??梢园?code>enum看成是一個普通的class,它們都可以定義一些屬性和方法,不同之處是:enum不能使用extends關(guān)鍵字繼承其他類,因?yàn)?code>enum已經(jīng)繼承了java.lang.Enum(java是單一繼承)。