2012-04-22 31 views
1

是不是就不可能有一個未定義的類型參數e擴展泛型類型:爲什麼所有的枚舉擴展Enum <e>

class Foo extends enum<E> 

他們如何擴大呢?

編輯:也在哪裏的values()方法定義?

在此先感謝

+2

你從哪裏得到? 'Foo'應該擴展'Enum '。 – bdonlan 2012-04-22 02:00:40

+0

當它創建enum類型的枚舉時,是否隱式定義e? – rubixibuc 2012-04-22 02:01:57

+2

這裏是java.lang.Enum的來源,如果有幫助:http://www.docjar.com/html/api/java/lang/Enum.java.html – Thilo 2012-04-22 02:02:56

回答

5

這的確是非法使用未定義的類型參數來擴展泛型類型。然而,枚舉不這樣做。如果你正在反編譯一些java代碼,並在那裏看到一個<E>(並且你的枚舉類型沒有命名爲E),你的反編譯器不能正確地處理泛型。

一個枚舉暗含延伸Enum<YourEnumType>。也就是說,編譯器隱式生成class YourEnumType extends Enum<YourEnumType>。通過向下傳遞自己的類型,它允許EnumcompareTovalueOf函數拒絕來自不同類型的enum的值。

+0

如果不是枚舉泛型中定義的values()方法在哪裏? – rubixibuc 2012-04-22 02:08:23

+0

當然在生成的類中。 – bdonlan 2012-04-22 02:11:51

+0

所以這是人爲的說話方式? – rubixibuc 2012-04-22 02:12:47