將上一個(gè)例子編譯后的 .class 文件進(jìn)行反編譯后,會(huì)看到一些有趣的問(wèn)題:
Compiled from "ColorEnum.java"public final class lirui.ColorEnum extends java.lang.Enum<lirui.ColorEnum> { public static final lirui.ColorEnum RED; public static final lirui.ColorEnum BLUE; public static final lirui.ColorEnum GREEN; public static lirui.ColorEnum[] values(); public static lirui.ColorEnum valueOf(java.lang.String); public java.lang.String getDescription(); public static lirui.ColorEnum next(); public java.lang.String toString(); public static void main(java.lang.String[]); static {};}編譯器為類聲明添加了 final,并且繼承了 Enum 類,所以編寫(xiě)枚舉類時(shí)不能在繼承其他類,但是可以實(shí)現(xiàn)接口。編譯器添加了 static final 的枚舉對(duì)象,這也是我們平時(shí)可以使用 ColorEnum.RED 獲取枚舉實(shí)例的原因。所以枚舉實(shí)現(xiàn)是單例的。編譯器添加了 values(),valueOf() 這兩個(gè)方法,而對(duì)于他的父類 Enum 也有一個(gè)valueOf(),不過(guò)兩者參數(shù)不同,并不是同一個(gè)方法。將 ColorEnum 向上轉(zhuǎn)型為 Enum 時(shí),values() 方法將失效,但是可以使用 Class 上的 getEnumConstants() 獲取所有 enum 實(shí)例。EnumMap 是一個(gè)特殊的 map, 他要求其中的鍵必須來(lái)自一個(gè) enum。由于 enum 的數(shù)量有限,所以 Enum 內(nèi)部可以使用數(shù)組實(shí)現(xiàn),所以它的速度也非常快。
新聞熱點(diǎn)
疑難解答
圖片精選
網(wǎng)友關(guān)注