在Java中覆盖Iterables 的正确方法

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

private class DequeIterator implements Iterable { 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(); } } 

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

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

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

=> Deque.java:121:错误:不兼容的类型返回new DequeIterator(); ^必需:迭代器找到:Deque.DequeIterator

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

您可能希望实现Iterator ,这需要hasNext()next()remove()

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

您还需要从DequeueIterator删除 。 您已经说它实现了Iterable ,因此您限制了类型。 您正在将其更改为generics类型,这是第二个错误的原因。 我假设Item是在其他地方定义的具体类(特别是因为pElement返回它并且没有与之关联的generics类型)。

第三个错误,不知道121行中的内容,你没有包含它。 但最有可能的原因与我上面提到的相同( DequeIterator需要实现Iterator而不是Iterable

看起来你的内部DequeIterator类正在覆盖顶级Dequegenerics。 只需从DequeIterator定义中删除 DequeIterator 。 此外,应该实现Iterable的类必须是您的Deque类, DequeIterator必须实现Iterator

 public class Deque implements Iterable { //implementation... private class DequeIterator implements Iterator { //implementation... } } 

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

在类Iterable存在方法iterator() ,它是抽象的。 您负责实现每个抽象方法。

您必须覆盖类DequeIteratoriterator()方法,因为它实现了Iterable接口。

 hasNext(), next(), remove() - these methods are in Iterator interface. 

您的Iterator实现Iterable而不是实现Iterator。 始终在应该覆盖基类或接口方法的方法上添加@Override注释。