【问题标题】:error: method does not override or implement a method from a supertype错误:方法没有覆盖或实现超类型中的方法
【发布时间】:2013-10-22 16:09:51
【问题描述】:

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

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 扩展了类 Queue.ListIterator 中声明的 Object

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

如何让它工作?

【问题讨论】:

  • 你在使用 IDE 吗?
  • IntelliJ 和这些错误应该会告诉您该做什么。将int 替换为Integer
  • 不起作用,因为它修复了 error#2error#1 但告诉 @Incompatible types 987654324@
  • Nvm 是泛型类型参数声明。

标签: java iterator


【解决方案1】:

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

public Integer next()

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

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

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

【讨论】:

  • 谢谢!但是,如果我需要让这个队列更通用:不仅要处理整数,还要处理所有可以迭代的元素?我必须指定public class Queue&lt;?&gt; implements Iterable&lt;?&gt;吗?
  • 如果你想处理所有元素然后不提供任何泛型类型。它会给你一个抑制警告但应该可以工作,那么你可以使用 autobxing 添加你想要的任何类型的数据,整数和字符串..
  • @RCola 那么你应该有public class Queue&lt;T&gt; implements Iterable&lt;T&gt;,并在你的代码中使用类型参数(而不是整数)。
猜你喜欢
  • 1970-01-01
  • 2019-06-01
  • 1970-01-01
  • 2016-05-06
  • 2013-04-22
  • 1970-01-01
  • 2021-11-26
  • 2022-11-01
  • 2015-11-19
相关资源
最近更新 更多