这是我为实现链表而编写的代码,
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();
}
}
我不知道出了什么问题我遇到了错误,请帮我解决这些问题
=&GT; Deque.java:25:错误:Deque.DequeIterator不是抽象的,并且不会覆盖Iterable中的抽象方法iterator()
=&gt; Deque.java:35:error:不兼容的类型 Item ret = pElement.it; ^ 要求:项目#2 发现:项目#1
=&gt; Deque.java:121:错误:不兼容的类型 return new DequeIterator(); ^ 要求:迭代器 发现:Deque.DequeIterator
答案 0 :(得分:5)
您正在实施错误的界面。 Iterable
要求您实施您未提供的iterator()
方法。因此第一个错误。
您可能希望实现Iterator
,这需要hasNext()
,next()
和remove()
。
你没有显示你的其余代码,但我认为你有Deque.java
其余的链表代码(即对head
的引用等),所以可能您可能希望Deque implements Iterable<Item>
使用iterator()
方法返回DequeIterator
的实例。
您还需要从<Item>
中删除DequeueIterator
。您已经说它实现了Iterable<Item>
,因此您限制了类型。您正在将其更改为泛型类型,这是导致第二个错误的原因。我假设Item
是在其他地方定义的具体类(特别是因为pElement
返回它并且没有与之关联的泛型类型)。
第三个错误,不知道第121行是什么,你没有包括它。但最有可能的原因与我上面提到的相同(DequeIterator
需要实现Iterator
而不是Iterable
)
答案 1 :(得分:1)
您的内部DequeIterator
类似乎覆盖了顶级<Item>
中的Deque<Item>
泛型。只需从<Item>
定义中删除DequeIterator
即可。此外,应该实现Iterable
的类必须是您的Deque
类,DequeIterator
必须实现Iterator
。
public class Deque<Item> implements Iterable<Item> {
//implementation...
private class DequeIterator implements Iterator<Item> {
//implementation...
}
}
答案 2 :(得分:0)
Deque.java:25:错误:Deque.DequeIterator不是抽象的,也不是 在Iterable中覆盖抽象方法iterator()
在课程Iterable
中存在方法iterator()
,这是抽象的。您负责实现每个抽象方法。
答案 3 :(得分:0)
您必须覆盖类iterator()
中的DequeIterator<Item>
方法,因为它实现了Iterable
接口。
hasNext(), next(), remove() - these methods are in Iterator interface.
答案 4 :(得分:0)
您的Iterator实现Iterable而不是实现Iterator。始终在应该覆盖基类或接口方法的方法上添加@Override
注释。