2012-10-05 45 views
3

我有一個類的Java 7個泛型使得其延伸Swing組件如:對Swing組件

public class MyCustomClass extends JComboBox 

這裏的問題是,我得到的編譯器警告:

的JComboBox是一個原始類型。參考泛型JComboBox應參數化

我不確定要參數化JComboBox,以便從這裏進一步擴展的任何類都可以使用任何類型的對象。我試圖把它作爲擴展JComboBox,等等,但是這不起作用。任何建議,將不勝感激。

public class MyCustomClass<T> extends JComboBox<T> 

如果我沒有記錯的語法:

+0

另請參閱此相關的[示例](http://stackoverflow.com/a/9441109/230513)。 – trashgod

+0

你通常不需要擴展'Jxxx'類(除了自定義繪畫,我想不出任何有效的用例)。它們被設計成可以使用,並且有API來定製它們。而不擴展它們也可以解決你的問題 – Robin

+0

你需要這樣做的主要原因是你想要相同的樣式適用於所有的類。例如,我們希望所有的JComboBoxes都是不透明的,我們將prototypeDisplayValue設置爲一致的,最大的行數等等。基本上我們要設置它來提供一致的UI L&F,而無需在任何地方定義它。如果有什麼改變,它只在一個位置改變。 –

回答

6

如果有對JComboBox時的參數類型沒有限制,那麼你就可以走了。

2

JComboBox成爲Java 7中的泛型類,例如你應該告訴編譯器在JComboBox實例中有什麼類型的對象。所以你可以讓你成爲通用類,或者指定JComboBox的類型。

3

該參數是您在ComboBox中想要的對象的類型。

你的選擇是:

答:MyCustomClass總是希望同類型的對象,所以你做這樣的事情:

public class MyCustomClass extends JComboBox<String> 

OR

B:MyCustomClass仍然ISN 「深入」樹下,以知道它將工作的類的類型。所以你這樣做:

public class MyCustomClass<T> extends JComboBox<T> 
4

泛型影響預期在模型中的數據類型。這從長遠來看是一個很好的特點,但可能意味着一些短期的痛苦。

你有兩個我能想到的選擇。

首先,構建你的自定義類,所以它允許仿製藥落空......

public class MyCustomClass<E> extends JComboBox<E> 

其次,通過一個Object作爲組合框

public class MyCustomClass extends JComboBox<Object> 

的數據類型(或第三,爲了構建它的目的,將自定義組合框限制爲預定義的數據類型)

+0

我想,這兩種方法都不適用於Java 6? –

+0

@guitar_freak不,Java 6不支持Swing組件中的泛型 – MadProgrammer