我想用Enum中的所有可用值初始化泛型類。這是我想它是如何工作的:在泛型類中使用Enum.values擴展枚舉
public class MyClass<E extends Enum<E>> {
E[] choices;
public MyClass() {
choices = E.values();
}
然而,調用E.values
在Eclipse中是不能接受的話,這種方法是未定義此E.
使用此構造,而不是被接受,但要求調用者提供的值:
public MyClass(E[] e) {
choices = e;
}
在我找到的文檔:
Java編程語言枚舉類型比其他語言中的 對等更強大。枚舉聲明定義了一個類 (稱爲枚舉類型)。枚舉類的主體可以包含其他字段的方法和 。編譯器在創建枚舉時會自動添加一些特殊方法 。例如,它們有一個靜態值方法 ,該方法返回一個數組,其中包含枚舉的所有值,其排列順序爲 。
有沒有辦法解決這個問題?
我相信這已經無關類型擦除。問題的原因是'public static E [] values()'方法不是'java.lang.Enum'類中存在的方法。 [Java語言規範](http://docs.oracle.com/javase/specs/jls/se7/html/jls-8.html#jls-8.9.2)解釋說,這種方法是綜合生成的所有枚舉。所以,在我看來,該方法存在於枚舉的任何具體引用中,但不在枚舉類本身中。 – 2012-07-26 07:28:53
如果有兩個類,'公共類A { \t \t 公共靜態無效測試(){} }'和'公共B類 { \t \t 公共B(){A.test(); },行A.test()仍然是一個編譯時錯誤,因爲在運行時,如果沒有明確定義A,編譯器就不會知道A的類型,比如說傳遞給構造函數的類型A的參數。 – Jeshurun 2012-07-26 07:44:28
@Jeshrun不,它不是。這是一個編譯時錯誤,因爲在你的聲明中,'B'''A'是一個無限類型的參數。這個聲明中的'A'與'A'類沒有任何關係。如果你聲明它爲'B',那麼它會被編譯嗎?聲明在類型參數和類名之間沒有明顯的歧義,並且使用對T的引用? –
2012-07-26 07:56:15