我目前正在學(xué)習(xí)泛型,我有一個任務(wù),我必須使用 T 類型參數(shù)和數(shù)組數(shù)據(jù)成員和一些方法(setItem、getItem、visitor、condition 和 addAll)創(chuàng)建一個數(shù)組類。我對 addAll 方法有問題:public class Array<T> { private T[] array; public Array(T[] array){ this.array = array; } public void setItem(int i, T item){ if (i < 0 || i > array.length) { System.out.println("There is no this value in the array!"); } array[i] = item; } public T getItem(int i){ if (i < 0 || i > array.length) { System.out.println("There is no this item in the array!"); } return array[i]; } public <E> boolean addAll(Collection<? extends E> c){ boolean modified = false; for (E e : c){ if (c.add(e)){ modified = true; } } return modified; }}NB 不接受ein add 方法。我不明白為什么...... 如果我在方法中使用 T 類型參數(shù)而不是 E (public boolean addAll(Collection <? extends T>c){} ),情況是一樣的。我收到消息不兼容的類型:E 無法轉(zhuǎn)換為 CAP#1,其中 E 是類型變量,而 CAP#1 是新的類型變量。我究竟做錯了什么?我的第二個問題是 Array 類使用了一個抽象的 Condition 類,它有 6 個子類。andCondition、orCondition 等都可以,但是greaterCondition 和doubleCondition 不起作用。我知道問題出在哪里,但我找不到解決方案。首先,我只<T>在 classname 之后使用,然后嘗試以下<T extends Number>,但沒有改變:public abstract class Condition<T> { public abstract boolean condition(T item);}public class doubleCondition<T extends Number> extends Condition<T> { public DoubleCondition (){ } @Override public boolean condition(T item) { if (item % 2 == 0){ return true; } return false; }我收到消息:二元運(yùn)算符的操作數(shù)類型錯誤%,第一種類型:T,第二種類型:int,其中 T 是類型變量。我應(yīng)該如何使用類型參數(shù)或布爾條件方法來檢查參數(shù)中的項(xiàng)目是否可以在沒有左的情況下除以 2,所以它是雙/偶。和greaterCondition 類:public class greaterCondition<T extends Number> extends Condition<T> { private T border; public (T border){ this.border = border; } @Override public boolean condition(T item) { return item > border; }}這里NB不處理>操作符。
1 回答

慕斯709654
TA貢獻(xiàn)1840條經(jīng)驗(yàn) 獲得超5個贊
您的方法不是類型安全的,有兩個原因:
E
和之間沒有關(guān)系T
;你可以傳遞一些完全不相關(guān)的類型的集合。您可以將內(nèi)容添加到 的集合中
? extends Whatever
,因?yàn)槟恢涝摷蠈?shí)際包含的類型(它可能只是某個其他子類的集合)。
相反,您應(yīng)該創(chuàng)建一個接受 a 的非泛型方法Collection<? super T>
,該方法保證能夠保存T
s (因?yàn)樗?的集合T
或超類型T
)。
添加回答
舉報
0/150
提交
取消