在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
类正在覆盖顶级Deque
的
generics。 只需从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()
,它是抽象的。 您负责实现每个抽象方法。
您必须覆盖类DequeIterator
的iterator()
方法,因为它实现了Iterable
接口。
hasNext(), next(), remove() - these methods are in Iterator interface.
您的Iterator实现Iterable而不是实现Iterator。 始终在应该覆盖基类或接口方法的方法上添加@Override
注释。