Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/335.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java泛型没有返回正确的值_Java_Generics_Iterator_Linked List_Iterable - Fatal编程技术网

Java泛型没有返回正确的值

Java泛型没有返回正确的值,java,generics,iterator,linked-list,iterable,Java,Generics,Iterator,Linked List,Iterable,我正在用Java实现一个双链表,它实现了迭代器类。我有一个DoublyLinkedList类,它有一个名为DoublyLinkedListIterator的内部类来帮助遍历列表。(见下文) (其中当前为节点类型) 出于某种原因,我不断出现以下错误: DoublyLinkedList.java:62: error: incompatible types current = iterator.next();

我正在用Java实现一个双链表,它实现了迭代器类。我有一个DoublyLinkedList类,它有一个名为DoublyLinkedListIterator的内部类来帮助遍历列表。(见下文)

(其中当前为节点类型)

出于某种原因,我不断出现以下错误:

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
DoublyLinkedList.java:62:错误:类型不兼容
current=iterator.next();
^
必需:节点
发现:T
其中T是一个类型变量:
T扩展类DoublyLinkedList中声明的对象

有什么想法吗?

迭代器接口定义为

public interface Iterator<E> {
    [...]

    E next();

    [...]
}
公共接口迭代器{
[...]
E next();
[...]
}
你把它当作

private class DoublyLinkedListIterator<E> implements Iterator<E> {
私有类DoublyLinkedListIterator实现迭代器{
但是要把它作为

public Node<E> next() {
公共节点下一步(){ 您不应该返回
节点
,您应该返回一个
E

迭代器
包含一个方法
E next()
。您没有声明这样的方法;您声明了
节点next()


如果方便的话,尝试为
E
插入一个具体类型。想象一下你有一个
迭代器
。你不希望
next()
返回一个
字符串,而不是
节点

如果你实现
迭代器
,你必须提供一个
next()
返回
E
。我只看到一个
next()
返回
节点
。您显示的代码中不包含错误中的行。或者是这样,或者他应该实现
迭代器
,这取决于他想要什么。@ajb-Right。我会说很少有链接列表显示其内部。所以我尝试分配
节点当前=迭代器。next();
但是我仍然得到相同的错误。next()返回的泛型类型不应该是节点吗?@user1493543
next()
的返回类型是
E
。您使用了什么作为类型参数
E
的类型参数?您使用了
E
,因此它不能是
node
private class DoublyLinkedListIterator<E> implements Iterator<E> {
public Node<E> next() {