在Java中覆盖Iterables <Obj>的正确方法

hkb*_*ath 0 java iterator linked-list

这是我为实现链表而编写的代码,

private class DequeIterator<Item> implements Iterable<Item> {
    private Node pElement;

    DequeIterator() {
        pElement = first;
    }

    public boolean hasNext() {
        return pElement != null;
    }

    public Item next() {
        if (!this.hasNext()) {
            throw new NoSuchElementException();
        }
        Item ret = pElement.it;
        pElement = pElement.next;
        return ret;
    }

    public void remove() {
        throw new UnsupportedOperationException();
    }
}
Run Code Online (Sandbox Code Playgroud)

我不知道出了什么问题我得到了以下错误,请帮我解决这些问题

=> Deque.java:25:错误:Deque.DequeIterator不是抽象的,并且不会覆盖Iterable中的抽象方法iterator()

=> Deque.java:35:错误:不兼容的类型Item ret = pElement.it; ^必需:项目#2找到:项目#1

=> Deque.java:121:错误:不兼容的类型返回new DequeIterator(); ^ required:Iterator发现:Deque.DequeIterator

jbx*_*jbx 5

您正在实现错误的接口.Iterable要求您实现iterator()您未提供的方法.因此第一个错误.

你可能想要实现Iterator,这需要hasNext(),next()remove().

你没有显示你的其余代码,但我认为你有Deque.java其余的链表代码(即对head等的引用),所以你可能想要Deque implements Iterable<Item>使用iterator()返回实例的方法DequeIterator.

您还需要去掉<Item>DequeueIterator.您已经说它实现了Iterable<Item>,因此您限制了类型.您正在将其更改为泛型类型,这是导致第二个错误的原因.我认为这Item是在其他地方定义的具体类(特别是因为pElement返回它并且没有与之关联的泛型类型).

第三个错误,不知道第121行是什么,你没有包括它.但最有可能它对我上面提到的同样的理由(DequeIterator需要实现IteratorIterable)