Java 在Eclipse中重写方法时在运行时从超类型定义泛型
我有一个名为Java 在Eclipse中重写方法时在运行时从超类型定义泛型,java,eclipse,generics,class-hierarchy,Java,Eclipse,Generics,Class Hierarchy,我有一个名为AbstractCollection的类和一个名为AbstractMap的子类。子类定义为公共抽象类AbstractMap扩展了AbstractCollection。名为append inAbstractCollection的方法具有以下签名受保护的抽象int append(E元素)。但是当我在AbstractMap类public int append(Pair Pair)中重写这个方法时,我得到了一个错误。这些泛型都不是通配符,因为它们都是在AbstractMap的实例被创建为K和
AbstractCollection
的类和一个名为AbstractMap
的子类。子类定义为公共抽象类AbstractMap扩展了AbstractCollection
。名为append inAbstractCollection
的方法具有以下签名受保护的抽象int append(E元素)
。但是当我在AbstractMap类public int append(Pair Pair)
中重写这个方法时,我得到了一个错误。这些泛型都不是通配符,因为它们都是在AbstractMap的实例被创建为K和V时指定的,因此我不理解为什么会出现这个错误
我还尝试让Eclipse为我重写该方法,但它编写的签名与我写的签名相同,因此错误仍然存在<代码>右键单击代码>>源>>重写/实现方法…
更新
我以最简单的形式重新创建了产生错误的代码:
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> {
}
}
公共抽象类AbstractCollection{
受保护的抽象int-append(E元素);
}
公共抽象类AbstractMap扩展了AbstractCollection{
@凌驾
public int append(Pair Pair){//error弹出在这里
//...
}
公共静态最终类对{
}
}
我还在另一个版本的Eclipse上再次尝试了这一点,现在它可以工作了,尽管错误标志仍然出现在我主要使用的版本(Luna with java 8)上
错误标志包含以下消息:
AbstractMap类型的方法append(AbstractMap.Pair)必须重写或实现超类型方法
这可能是Eclipse如何报告错误的问题 它应该首先报告的是
public abstract class AbstractMap<K, V> extends AbstractCollection<Pair<K, V>> {
// ^ undefined at this point
或者使用它的完全限定名
public abstract class AbstractMap<K, V> extends AbstractCollection<com.example.AbstractMap.Pair<K, V>> {
公共抽象类AbstractMap扩展了AbstractCollection{
这只是一个错误还是一个非常具体的错误,可以帮助我们找出错误所在?我无法重现您的错误。您确定已提供了所需的所有详细信息吗?请参阅。您能否明确说明这些类的位置?它们是否在自己的文件中声明?AbstractCollection和AbstractMap是两个独立的文件。Pair是de在AbstractMap中被罚款。目前我在自己的文件中定义了Pair,因为这种方法不会生成错误标志。我只是想知道为什么。@SotiriosDelimanolis
public abstract class AbstractMap<K, V> extends AbstractCollection<com.example.AbstractMap.Pair<K, V>> {