我有一个外部课程DoublyLinkedList<T>
和两个内部课程DoublyLinkedNode<T>
以及DoublyLinkedListIterator<T>
。它们的安排如下:
public class DoublyLinkedList<T> extends Collection<T> {
private DoublyLinkedNode<T> head;
private DoublyLinkedNode<T> tail;
public class DoublyLinkedNode<T> {
private DoublyLinkedNode<T> prev;
private DoublyLinkedNode<T> next;
T element;
}
public class DoublyLinkedListIterator<T> implements ListIterator<T> {
private DoublyLinkedNode<T> current = head;
}
}
现在,因为我在stackoverflow和其他来源的多个页面上听到/读取Iterator应该在相应的可迭代类中实现,如DoublyLinkedList<T>
,我认为它会更容易,因为您可以访问外部类字段。现在我想初始化一个DoublyLinkedListIterator<T>
的实例,但是Eclipse在这一点上说:
private DoublyLinkedNode<T> current = head;
在DoublyLinkedListIterator<T>
内:
类型不匹配:无法转换为DoublyLinkedList.DoublyLinkedNode&lt; T> to DoublyLinkedList.DoublyLinkedNode&lt; T&gt;
解决这个问题的唯一方法是再次使用相同的类型:
private DoublyLinkedNode<T> current = (DoublyLinkedNode<T>) head;
为什么会这样?
答案 0 :(得分:11)
您已宣布内部课程DoublyLinkedNode
和DoublyLinkdListIterator
。
内部类在范围内具有封闭类的所有泛型类型参数,因此T
已经可用于它们。再次声明它们时,您将T
隐藏在封闭类上。它们不同T
s。
删除隐藏外部T
的{{1}}的重新声明(并且您的类应该实现T
,这是一个接口),并让您的内部类使用外部Collection
:
T