我有一个名为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>> {