Java泛型没有返回正确的值
我正在用Java实现一个双链表,它实现了迭代器类。我有一个DoublyLinkedList类,它有一个名为DoublyLinkedListIterator的内部类来帮助遍历列表。(见下文)
public Iterator<T> iterator() {
return new DoublyLinkedListIterator();
}
private class DoublyLinkedListIterator<E> implements Iterator<E> {
private Node<E> current;
private DoublyLinkedListIterator() {
current = DoublyLinkedList.this.head;
}
public boolean hasNext() {
return (current != null);
}
public Node<E> next() {
Node<E> ret = null;
if (hasNext()) {
ret = current;
current = current.next();
return ret;
}
else {
throw new java.util.NoSuchElementException("No next element.");
}
}
public void remove() {
throw new UnsupportedOperationException("Can't remove");
}
}
}
在上面,我试图通过创建迭代器的实例来获取下一个值,如下所示
current = iterator.next();
(其中当前为节点类型)
出于某种原因,我不断出现以下错误:
DoublyLinkedList.java:62: error: incompatible types
current = iterator.next();
^
required: Node<T>
found: T
where T is a type-variable:
T extends Object declared in class DoublyLinkedList
有什么想法吗
# 1 楼答案
Iterator<E>
包含一个方法E next()
。您还没有声明这样的方法;您声明了Node<E> next()
试着为
E
插入一个具体的类型,如果它更容易的话。想象你有一个Iterator<String>
。你不希望next()
返回一个String
而不是一个Node<String>
吗# 2 楼答案
Iterator
接口定义为你把它当作
但要把它作为
你不应该返回一个
Node<E>
,你应该返回一个E