我正在做一项任务,要求我实现跳过列表和二叉搜索树。我也应该为每个数据结构实现迭代器。同一通配符上的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