我有一个名为AbstractCollection<E>的类和一个名为AbstractMap<K, V>的子类。子类定义为public abstract class AbstractMap<K, V> extends AbstractCollection<Pair<K, V>>AbstractCollection<E>中称为append的方法具有以下签名protected abstract int append(E element)。但是,当我在AbstractMap类public int append(Pair<K, V> pair)中重写此方法时,出现错误。泛型都不是通配符,因为它们都是在将AbstractMap实例创建为K和V时指定的,因此我不明白为什么会出现此错误。

我还尝试让Eclipse为我覆盖该方法,但是它写入的签名与我所做的签名相同,因此错误仍然存​​在。 Right-click on code >> Source >> Override/Implement Methods...

更新
我重新创建了以最简单的形式产生错误的代码:

public abstract class AbstractCollection<E> {

    protected abstract int append(E element);
}

public abstract class AbstractMap<K, V> extends AbstractCollection<Pair<K, V>> {

    @Override
    public int append(Pair<K, V> pair) {  //error pops up here
        //...
    }

    public static final class Pair<K, V> {

    }
}


我还在另一个版本的Eclipse上再次尝试了此操作,现在它可以工作了,尽管错误标志仍出现在我主要使用的版本上(带有Java 8的Luna)。

错误标志包含以下消息:


  类型为AbstractMap的方法append(AbstractMap.Pair)必须重写或实现一个超类型方法

最佳答案

Eclipse如何报告错误可能是一个问题。

它应该首先报告的是

public abstract class AbstractMap<K, V> extends AbstractCollection<Pair<K, V>> {
//                                                                 ^ undefined at this point


声明此类及其超类型时,类型Pair不在词法范围内。您需要导入它。

import com.example.AbstractMap.Pair;


或使用其完全限定的名称

public abstract class AbstractMap<K, V> extends AbstractCollection<com.example.AbstractMap.Pair<K, V>> {

09-05 07:49