基于链表建立队列实现。由于两个错误,无法运行应用程序:
public class Queue<Integer> implements Iterable<Integer> {
...
public Iterator<Integer> iterator() {
return new ListIterator(first);
}
private class ListIterator<Integer> implements Iterator<Integer> {// error #1
private Node<Integer> current;
public ListIterator(Node<Integer> first) {
current = first;
}
public boolean hasNext(){ return current != null; }
public void remove() { throw new UnsupportedOperationException();}
public int next() { // error #2
if (!hasNext()) throw new NoSuchElementException();
int item = current.item;
current = current.next;
return item;
}
}
}
错误#1:错误:Queue.ListIterator不是抽象的,并且不会覆盖Iterator中的抽象方法next() 其中Integer是一个类型变量: 整数扩展在类Queue.ListIterator
中声明的Object错误#2:错误:Queue.ListIterator中的next()无法在Iterator中实现next() 返回类型int与Integer不兼容 其中E,Integer是类型变量: E扩展在接口Iterator中声明的Object 整数扩展在类Queue.ListIterator
中声明的Object如何让它运作?
答案 0 :(得分:6)
Java中的装箱和拆箱在许多地方简化了代码,但方法返回类型不是其中之一。 next
方法必须返回Integer
,而不是int
。它必须与泛型类型参数完全匹配。
public Integer next()
其次,您在Integer
和Queue
类中声明了与ListIterator
无关的泛型类型参数java.lang.Integer
。删除它:
// here
public class Queue implements Iterable<Integer> {
和
// here
private class ListIterator implements Iterator<Integer> {