1

基于链表构建队列实现。由于两个错误,无法运行应用程序:

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 是类型变量:Integer extends Object 在类 Queue.ListIterator 中声明

错误#2:错误:Queue.ListIterator 中的 next() 无法在 Iterator 中实现 next() 返回类型 int 与其中 E,Integer 是类型变量的 Integer 不兼容:E 扩展接口 Iterator 中声明的对象 Integer 扩展类中声明的对象队列.ListIterator

如何让它工作?

4

1 回答 1

7

Java 中的装箱和拆箱在许多地方简化了代码,但方法返回类型不是其中之一。该next方法必须返回一个Integer,而不是一个int。它必须与泛型类型参数完全匹配。

public Integer next()

其次,您在 和 类中声明IntegerQueue一个ListIteratorjava.lang.Integer. 去掉它:

//              here
public class Queue implements Iterable<Integer> {

//                      here
private class ListIterator implements Iterator<Integer> {
于 2013-10-15T00:20:54.750 回答