我正在尝试通过在自己的“ MyQueue”类中实现它来发展对Queue接口的了解。但是,我想重写iterator()方法。由于我不能同时实现Iterator和Queue接口,所以我很茫然。
在我的iterator()方法上,当我将鼠标悬停在cannot convert from MyQueue<E>.QueueIterator to Iterator<E>
字下的红色下划线上时,Eclipse给了我一个错误new QueueIterator()
。
此外,当我尝试实现“ QueueIterator”内部类时,当我将鼠标悬停在单词syntax error on token "class", @ expected
下方的红色下划线上时,Eclipse给出了错误class
。
在下面的代码示例中,我删除了与我的问题无关的所有方法。我知道我必须实现这些方法才能实现Queue。我只是想让问题更清楚。
如何覆盖iterator()方法?
MyQueue类:
import java.util.Collection;
import java.util.Iterator;
import java.util.NoSuchElementException;
import java.util.Queue;
/**
* A custom queue class. Uses a singly-linked list.
*/
public class MyQueue<E> implements Queue {
// the top of the queue
private Node<E> first;
private int size;
/**
* Creates new myQueue object
*/
public MyQueue() {
first = null;
current = null;
size = 0;
}
@Override
public Iterator<E> iterator() {
return new QueueIterator();
}
/**
* Holds Objects and points to the next one.
*
*/
private class Node<E> {
private E data;
private Node<E> next;
/**
* Creates a Node object
* @param data The Object to be held by the Node
*/
Node(E data) {
this.data = data;
this.next = null;
}
private Node<E> getNext() {
return this.next;
}
private E getData() {
return this.data;
}
}
/**
* Iterator implementation
*/
private class QueueIterator() {
private Node<E> curNode;
public QueueIterator() {
curNode = null;
}
public boolean hasNext() {
if(curNode == null && first != null) {
return true;
} else if (curNode.getNext() != null) {
return true;
} else {
return false;
}
}
public E next() {
if(curNode == null && first != null) {
curNode = first;
return curNode.getData();
}
if(!hasNext()) {
throw new NoSuchElementException();
}
curNode = curNode.getNext();
return curNode.getData();
}
}
答案 0 :(得分:2)
QueueIterator
需要实现Iterator<E>
。
您不应在此行上加上括号:
private class QueueIterator() {
应该是:
private class QueueIterator {
实际上:
private class QueueIterator implements Iterator<E> {