error:方法不会覆盖或实现超类型的方法

时间:2013-10-15 00:16:45

标签: java iterator

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

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

如何让它运作?

1 个答案:

答案 0 :(得分:6)

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

public Integer next()

其次,您在IntegerQueue类中声明了与ListIterator无关的泛型类型参数java.lang.Integer。删除它:

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

//                      here
private class ListIterator implements Iterator<Integer> {