Java泛型不兼容类型linkedlist迭代器

Java泛型不兼容类型linkedlist迭代器,java,generics,inner-classes,Java,Generics,Inner Classes,正在尝试为泛型链表创建迭代器。当我试图创建一个“current”节点以基于head sentinel遍历列表时,我得到一个不兼容的类型错误。这是相关的台词 public class LinkedList<T> implements Iterable<T> { private node<T> headsent; private node<T> tailsent; public DistanceEventList()

正在尝试为泛型链表创建迭代器。当我试图创建一个“current”节点以基于head sentinel遍历列表时,我得到一个不兼容的类型错误。这是相关的台词

public class LinkedList<T> implements Iterable<T>
{
    private node<T> headsent;
    private node<T> tailsent; 
    public DistanceEventList()
    {
        headsent = new node<T>();
        tailsent = new node<T>();
        headsent.setnext(tailsent);
        tailsent.setprevious(headsent);
    }
    public node<T> getheadsent()
    {
        return headsent;
    }
    ...
    public MyIterator<T> iterator() {
        return new MyIterator<T>();
    }
    public class MyIterator<T> implements Iterator<T>
    {
        private node<T> current = getheadsent();
        public T next() {
            current = current.getnext();
            return current.getdata();
        }
    private class node<T> {
        private T data;
        private node<T> next;
        private node<T> previous;    
        ...
        public node<T> getnext()
        {
            return next;
        }
    }
}
公共类LinkedList实现了Iterable
{
私有节点头;
私有节点;
公共距离事件列表()
{
headsent=新节点();
tailsent=新节点();
headsent.setnext(tailsent);
tailsent.setprevious(headsent);
}
公共节点getheadsent()
{
回程车头;
}
...
公共MyIterator迭代器(){
返回新的MyIterator();
}
公共类MyIterator实现了迭代器
{
私有节点current=getheadsent();
公共交通工具{
current=current.getnext();
返回current.getdata();
}
私有类节点{
私有T数据;
私有节点下一步;
前一个私有节点;
...
公共节点getnext()
{
下一步返回;
}
}
}
并且产生了错误

LinkedList.java:65: error: incompatible types
private node<T> current = getheadsent();
required: LinkedList<T#1>.node<T#2)
found: LinkedList<T#1>.node<T#1)
LinkedList.java:65:错误:类型不兼容
私有节点current=getheadsent();

必需:LinkedList.node您有两个同名的类型

内部类共享在外部类中声明的类型变量

public class MyIterator<T> implements Iterator<T>
//                     ^^^
公共类MyIterator实现迭代器
//                     ^^^
新的类型声明
将外部声明隐藏起来

private node<T> current = getheadsent();
//      ^^^^^^^           ^^^^^^^^^^^
//      inner T             outer T
private node current=getheadsent();
//      ^^^^^^^           ^^^^^^^^^^^
//内T外T
您只需删除声明:

public class MyIterator implements Iterator<T>
//                    ^^^
公共类MyIterator实现迭代器
//                    ^^^

Ah我明白了,这也解释了为什么我的IDE将LinkedList列为LinkedList。这是否也意味着私有类节点{}应该是私有关闭节点{}?“这是否也意味着私有类节点{}应该是私有关闭节点{}”是,或者如果您实际上不需要从节点内部引用外部对象,则更适合使用私有静态类节点。