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

时间:2019-03-30 21:06:48

标签: java types casting mismatch

我正在为链表类的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;

1 个答案:

答案 0 :(得分:0)

出现此错误的原因是编译器执行了您所说的而不是您的意思。 T的{​​{1}}和ListIterator的{​​{1}}被视为两种不同的类型。如果您使用例如T而不是RegLinkList

解决您的问题的方法可能是使类静态化,并将U元素传递给构造函数。这样,您仍然可以声明不同的T,但是因为您传递了原始元素(因此“告诉”编译器一个head与另一个相同),所以很高兴。高兴地编译了以下代码(我添加了缺少功能的缺少方法的实现):

T