我有以下代碼:這個Java泛型代碼爲什麼不能正常工作?
public abstract class Heap {
Comparable<?> data[];
int count, size;
public Heap(int size) {
this.size = size;
data = new Comparable<?>[ size + 1 ];
this.count = 0;
}
public abstract void insert(Comparable<?> item);
}
class MinHeap extends Heap {
public MinHeap (int size) { super(size); }
public void insert(Comparable<?> item) {
//this line here is giving me an error
//due to how I am storing the array in Heap
int k = data[ 0 ].compareTo( item);
}
}
線上面指出的是給我這個錯誤:The method compareTo(capture#1-of ?) in the type Comparable<capture#1-of ?> is not applicable for the arguments (Comparable<capture#2-of ?>)
。我無法找到一種方法在保持這些條件的同時使其工作:1)我希望MinHeap能夠處理任何實現了Comparable
的數據,2)我不想將預先初始化的數組傳遞給構造函數。我這樣說是因爲我不希望做到以下幾點:
abstract class Heap< T extends Comparable<T> > {
T data[];
public Heap(T data[], int size) {
this.data = data;
//I do not want to have to pass an instantiated array.
//I want the constructor to handle the instantiation. If I do this I know the issue with the
//compareTo will be solved, but I really prefer to avoid this.
}
}
我的問題是這樣的:在我的代碼,爲什麼我收到此錯誤?除了第二個例子中描述的方式之外,有沒有人知道一種方式?我希望能夠用任何可比較的數據創建最小堆數據結構。全部有幫助評論感謝。謝謝。
注意:不要擔心實例變量的訪問修飾符。爲簡單起見,我將它們作爲默認值。我知道他們應該是私人的,或者是保護者。
第二個解決方案似乎是要走的路。你可以嘗試這樣的事情(但我不知道是否有可能這樣):data =(T [])Array.newInstance(data.getClass()。getComponentType(),size); – George