我有一个外类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;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,因为我在stackoverflow和其他来源的多个页面上听到/读取Iterator应该在相应的可迭代类中实现DoublyLinkedList<T>,我认为这样会更容易,因为您可以访问外部类字段.现在我想初始化一个实例DoublyLinkedListIterator<T>,但Eclipse在这一点上说:
private DoublyLinkedNode<T> current = head;
Run Code Online (Sandbox Code Playgroud)
在里面DoublyLinkedListIterator<T>:
类型不匹配:无法从DoublyLinkedList.DoublyLinkedNode <T>转换为DoublyLinkedList.DoublyLinkedNode <T>
解决这个问题的唯一方法是再次使用相同的类型:
private DoublyLinkedNode<T> current = (DoublyLinkedNode<T>) head;
Run Code Online (Sandbox Code Playgroud)
为什么会这样?
rge*_*man 11
你已经宣布了内部类DoublyLinkedNode和DoublyLinkdListIterator.内部类在范围内具有封闭类的所有泛型类型参数,因此T它们已经可用.再次声明它们时,您将隐藏T在封闭类上.他们是不同T的.
删除T隐藏外部的重新声明T(您的类应该实现Collection,这是一个接口),并让您的内部类使用外部T:
public class DoublyLinkedList<T> implements Collection<T> {
private DoublyLinkedNode head;
private DoublyLinkedNode tail;
public class DoublyLinkedNode {
private DoublyLinkedNode prev;
private DoublyLinkedNode next;
T element;
}
public class DoublyLinkedListIterator implements ListIterator<T> {
private DoublyLinkedNode current = head;
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
245 次 |
| 最近记录: |