添加转换为相同类型

时间:2017-12-06 21:20:42

标签: java casting

我有一个外部课程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;

为什么会这样?

1 个答案:

答案 0 :(得分:11)

您已宣布内部课程DoublyLinkedNodeDoublyLinkdListIterator。  内部类在范围内具有封闭类的所有泛型类型参数,因此T已经可用于它们。再次声明它们时,您将T隐藏在封闭类上。它们不同T s。

删除隐藏外部T的{​​{1}}的重新声明(并且您的类应该实现T,这是一个接口),并让您的内部类使用外部Collection

T