有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

有什么想法吗


共 (2) 个答案

  1. # 1 楼答案

    Iterator<E>包含一个方法E next()。您还没有声明这样的方法;您声明了Node<E> next()

    试着为E插入一个具体的类型,如果它更容易的话。想象你有一个Iterator<String>。你不希望next()返回一个String而不是一个Node<String>

  2. # 2 楼答案

    Iterator接口定义为

    public interface Iterator<E> {
        [...]
    
        E next();
    
        [...]
    }
    

    你把它当作

    private class DoublyLinkedListIterator<E> implements Iterator<E> {
    

    但要把它作为

    public Node<E> next() {
    

    你不应该返回一个Node<E>,你应该返回一个E