将变量分配给相同类型的对象时出现类型不匹配错误



我正在为链表类开发迭代器。我正在将节点分配给内部类中的变量,并收到"类型不匹配"错误。相关代码如下。

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;

您收到此错误的原因是编译器会按照您所说的进行操作,而不是按照您的意思进行操作。ListIteratorTRegLinkListT被视为两种不同的类型。如果您使用例如U而不是T.

问题的解决方案可能是使类静态并将head元素传递给构造函数。这样你仍然可以声明不同的T,但因为你传递了原始元素(从而"告诉"编译器一个T与另一个相同),它会很高兴。以下代码编译得很愉快(我添加了缺少的方法实现,没有功能):

import java.util.Iterator;
public class RegLinkList<T> implements Iterable<T> {
private Node<T> head;
public RegLinkList() {
head = null;
}
public static class Node<T> {
public Node<T> next = null;
public T data = null;
Node(T data) {
this.data = data;
}
}
public static class ListIterator<T> implements Iterator<T> {
Node<T> current;
Node<T> previous;
public ListIterator(Node<T> head) {
current = head;
previous = head;
}

@Override
public boolean hasNext() {
return false;
}
@Override
public T next() {
return null;
}
}
@Override
public Iterator<T> iterator() {
return new ListIterator<T>(head);
}
}

相关内容

  • 没有找到相关文章

最新更新