Java 泛型不兼容类型链表迭代器
Java Generics incompatible types linkedlist iterators
正在尝试为通用链表创建迭代器。当我尝试创建一个 'current' 节点以基于头部哨兵遍历列表时,我收到了不兼容的类型错误。这是相关的行
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,但我对泛型不是很了解,无法确定。希望上面的代码足以让某人识别错误(它很糟糕)。
谢谢!
您有两个同名类型。
内部 classes 共享在其外部 class 中声明的类型变量。所以当你有
public class MyIterator<T> implements Iterator<T>
// ^^^
新类型声明 <T>
隐藏了外部声明。
private node<T> current = getheadsent();
// ^^^^^^^ ^^^^^^^^^^^
// inner T outer T
您可以删除声明:
public class MyIterator implements Iterator<T>
// ^^^
正在尝试为通用链表创建迭代器。当我尝试创建一个 'current' 节点以基于头部哨兵遍历列表时,我收到了不兼容的类型错误。这是相关的行
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,但我对泛型不是很了解,无法确定。希望上面的代码足以让某人识别错误(它很糟糕)。 谢谢!
您有两个同名类型。
内部 classes 共享在其外部 class 中声明的类型变量。所以当你有
public class MyIterator<T> implements Iterator<T>
// ^^^
新类型声明 <T>
隐藏了外部声明。
private node<T> current = getheadsent();
// ^^^^^^^ ^^^^^^^^^^^
// inner T outer T
您可以删除声明:
public class MyIterator implements Iterator<T>
// ^^^