Java 泛型不兼容类型链表迭代器

标签 java generics inner-classes

尝试为通用链表创建迭代器。当我尝试创建一个“当前”节点以基于头哨兵遍历列表时,我收到了不兼容的类型错误。这是相关的行

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.java:65: error: incompatible types
private node<T> current = getheadsent();
required: LinkedList<T#1>.node<T#2)
found: LinkedList<T#1>.node<T#1)

似乎我介绍了两种不同类型的 T,但我对泛型不是很了解,无法确定。希望上面的代码足以让某人识别错误(它很糟糕)。 谢谢!

最佳答案

你有两个同名的类型。

内部类共享在其外部类中声明的类型变量。所以当你有

public class MyIterator<T> implements Iterator<T>
//                     ^^^

新类型声明<T>遮挡外面的阴影。

private node<T> current = getheadsent();
//      ^^^^^^^           ^^^^^^^^^^^
//      inner T             outer T

你可以只删除声明:

public class MyIterator implements Iterator<T>
//                    ^^^

关于Java 泛型不兼容类型链表迭代器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29862725/

相关文章:

c# - 必须有一个公共(public)的无参数构造函数,不是吗?

Java 泛型 : Wildcard capture misunderstanding

java - 不理解嵌套类型

java - 在外部类和内部类之间,在外部类内部或外部调用 main 方法时,它们的静态初始化程序运行顺序不同

java - 将 FileInputStream 转换为返回十六进制的流

java - 如何覆盖默认的 file.separator?

java - 将通用列表转换为非通用列表有什么影响?

java - 在范围内无法访问 OuterClass.StaticNestedClass 类型的封闭实例

java - String.format 运行时格式化

java - 二分查找和插入排序