我正在为链表类的Iterator工作。我正在将节点分配给内部类中的变量,并且收到“类型不匹配”错误。相关代码如下。
public class RegLinkList<T> implements Iterable<T>{
private Node<T> head;
public RegLinkList() {
head = null;
}
public class Node<T> {
public Node<T> next = null;
public T data = null;
Node(T data){
this.data = data;
}
}
public class ListIterator<T> implements Iterator<T>{
Node<T> current = head;
Node<T> previous = head;
我明白了:
Type mismatch: cannot convert from
RegLinkList<T>.Node<T> to RegLinkList<T>.Node<T>
编辑: 我当前的解决方案是
的未经检查的演员表 public class ListIterator<T> implements Iterator<T>{
Node<T> current = (Node<T>) head;
Node<T> previous = (Node<T>) head;
答案 0 :(得分:0)
出现此错误的原因是编译器执行了您所说的而不是您的意思。 T
的{{1}}和ListIterator
的{{1}}被视为两种不同的类型。如果您使用例如T
而不是RegLinkList
。
解决您的问题的方法可能是使类静态化,并将U
元素传递给构造函数。这样,您仍然可以声明不同的T
,但是因为您传递了原始元素(因此“告诉”编译器一个head
与另一个相同),所以很高兴。高兴地编译了以下代码(我添加了缺少功能的缺少方法的实现):
T