我有以下方法:插入通用號碼ArrayList中的Java
private <E extends Number> void AddOne(ArrayList<E> al, Double num) {
al.add(num);
}
al.add(NUM)不起作用。什麼是我可以將數字插入通用數組數組的最佳方式?
所以基本上,我有一個通用的
的ArrayList < E>人
我想插入它的數值,我該怎麼辦呢? (我記得C++很容易-_-)
我有以下方法:插入通用號碼ArrayList中的Java
private <E extends Number> void AddOne(ArrayList<E> al, Double num) {
al.add(num);
}
al.add(NUM)不起作用。什麼是我可以將數字插入通用數組數組的最佳方式?
所以基本上,我有一個通用的
的ArrayList < E>人
我想插入它的數值,我該怎麼辦呢? (我記得C++很容易-_-)
你不能在這個列表中添加anythig,因爲你不知道它是什麼類型。
考慮繼承樹是這樣的:
Number
|
|- BigInteger
|
|- NonNegativeInteger
|
|-PositiveInteger
你說你的名單是從Number
繼承元素的列表。好吧,所以假設你想添加Number
到列表中,但是等待你可以有List<BigInteger>
,並且你不能把Number
加入到列表中。
好吧,所以你可以把BigInteger
,對不對?沒有!因爲你的清單可能是List<NonNegativeInteger>
。而且這個故事還在繼續......
聲明列表爲List<T extends SomeObject>
可以確保當你從列表中獲得某些東西時,它的類型爲SomeObject
。沒有其他人知道。
那麼如何避免這個問題呢?只需刪除模板。
List<Number>
現在你可以把任何東西從Number
繼承。
或者說,什麼是更好的在你的情況下,改變Double
到E
:
private <E extends Number> void AddOne(ArrayList<E> al, E num) {
al.add(num);
}
+1以便於解釋,並且作爲一個附註,你可以使用ArrayList <?超級號碼>然後用它來存儲數字。 – wmz 2012-01-30 20:47:16
你的意思呢?
private void AddOne(ArrayList<Number> al, Double num) {
al.add(num);
}
我認爲你真正想要的是:
private void AddOne(ArrayList<Number> al, Double num) {
al.add(num);
}
,否則你不能到列表與添加劇組到E
你應該改變你的加入添加任何東西:
private <E extends Number> void AddOne(ArrayList<E> al, E num) {
al.add(num);
}
然後在你的泛型類的任何具體實例中,其中E
解析爲特定的數字類別,您將可以添加該類型的數字。
你的方法沒有意義。您想要將Double
添加到ArrayList
,該ArrayList
被定義爲包含任何延伸爲Number
的類。
如果您通過的數組是ArrayList<Integer>
,並且您嘗試將其添加到Double
,會發生什麼情況?
如果您只對擁有Number
的子類的東西ArrayList
感興趣,則不需要泛型;只需使用一個ArrayList<Number>
不工作意味着什麼?你在期待什麼,你有什麼?沒有這些細節,很難回答任何問題。 – kosa 2012-01-30 20:04:01
你的'ArrayList'是E的列表,所以你可以插入它的必須是一個E或一個子類。 'Double'是一個'Number',但它不一定是E;你必須將它投射到E才能使用。這真的是你需要的簽名嗎? – 2012-01-30 20:08:03
沒有「擴展」的ArrayList呢? –
Luciano
2012-01-30 20:08:08