2011-09-06 91 views
0

我想在java中開發一個類。問題是,構造函數不工作使用enumset的泛型類的構造函數的問題

類是這樣的:

public class EnumSetPlus<E extends Enum<E>> { 

//Map 
private EnumSet<E> map; 

//Constructor 
public EnumSetPlus(){ 

} 

我想inicializate與EnumSet.noneOf(E.class)地圖,並在構造函數給出了一個錯誤。

構造函數是否錯誤?我可以在沒有構造函數的情況下初始化變量映射嗎?

我在變量上下文中嘗試過public EnumSetPlus<<E extends Enum<E>>> = EnumSet.noneOf(E),但它不起作用。

我也試過map = EnumSet.noneOf(E.class)也進入構造函數,但它都不起作用。

我認爲這是一個問題的語法或方法

你能幫助我嗎?

事先感謝!

+1

你得到了什麼錯誤?通常它帶有一個有用的信息。 – Thilo

回答

3

問題是您需要一個E的類實例,這不能僅使用EE.class來完成。嘗試並提供一個Class<E>作爲構造函數參數,以便告訴該類爲其參數化的枚舉類。

這應該工作:

public EnumSetPlus(Class<E> clazz){ 
    map = EnumSet.noneOf(clazz); 
} 

的問題是,編譯器不知道是什麼類型E實際上是(這枚舉它),因此它無法解析在編譯時的類。您需要在運行時使用該信息,或者使用建議的參數,或者通過子類EnumSetPlus以及可以使用反射確定的具體類型參數。由於在這種簡單情況下反射方法會過度,我建議嘗試參數方法。

相關問題