我正在做一項任務,要求我實現跳過列表和二叉搜索樹。我也應該爲每個數據結構實現迭代器。同一通配符上的Eclipse類型不匹配錯誤
跳躍列表和二叉搜索樹使用泛型K和V.
public class SkiplistMap<K extends Comparable<K>,V> implements SortedMap<K,V>
public class SkiplistMapNode<K extends Comparable<K>,V>
public class BSTMap<K extends Comparable<K>,V> implements SortedMap<K,V>
public class BSTMapNode<K extends Comparable<K>,V>
的迭代器只能使用可比類型實現的,所以我插好?作爲不可比較的類型。
public class SkiplistMapIterator<T extends Comparable<T>> implements Iterator<T> {
SkiplistMap<T,?> list;
Queue<SkiplistMapNode<T,?>> queue;
int version;
public SkiplistMapIterator(SkiplistMap<T,?> sl){
list = sl;
queue = new LinkedList<SkiplistMapNode<T,?>>();
SkiplistMapNode<T,?> N = sl.getHead();
while (N != null){
queue.add(N);
N = N.getNext()[0];
}
version = sl.getVersion();
}
public void remove() throws UnsupportedOperationException{
if (queue.isEmpty()) throw new UnsupportedOperationException("No element present");
else {
T toRemove = queue.remove().getKey();
SkiplistMapNode<T,?> N = list.getHead();
while (N != null){
if (N.getNext()[0].getKey().compareTo(toRemove) == 0){
SkiplistMapNode<T,?> found = N.getNext()[0];
for (int l = list.getLevel()-1; l >= 0; l--){
N.getNext()[l] = N.getNext()[l].getNext()[l];
found.getNext()[l] = null;
}
list.incVersion();
break;
}
N = N.getNext()[0];
}
}
}
}
我的問題:正確性代碼的一邊,當我試圖做兩個SkiplistMap
或SkiplistMapNode
對象指向對方,Eclipse的怪胎尖叫有一個類型不匹配。它告訴我
Type mismatch: cannot convert from SkiplistMapNode<T,capture#16-of ?> to SkiplistMapNode<T,capture#15-of ?>
但我輸入相同的問號,所以我不知道爲什麼Eclipse討厭它。任何人都可以用假詞解釋嗎?我試過「打字」的方法,但它給了我更多的錯誤。
「但是我輸入相同的問號」 - 是的,但該問號代表「某些特定的未知類型」,所以兩個問號(也稱爲通配符捕獲)不能保證匹配。有關介紹,請參閱[關於通配符的Java教程文章](http://docs.oracle.com/javase/tutorial/java/generics/wildcards.html)。 –
你能告訴我們這個錯誤發生的地方嗎? (可能還有一些周圍的代碼,如果它可能與問題有關 - 例如它包含相關的變量聲明) – Marco13