gpt4 book ai didi

java - 在 Eclipse 中重写方法时在运行时从父类(super class)型定义泛型

转载 作者:太空宇宙 更新时间:2023-11-04 06:26:55 26 4
gpt4 key购买 nike

我有一个名为 AbstractCollection<E> 的类(class)和一个名为 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 上再次尝试过此操作,现在它可以工作了,尽管错误标志仍然出现在我主要使用的版本(Luna with java 8)上。

错误标志包含以下消息:

The method append(AbstractMap.Pair) of type AbstractMap must override or implement a supertype method

最佳答案

这可能是 Eclipse 如何报告错误的问题。

它应该首先报告的是

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

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

import com.example.AbstractMap.Pair;

或使用其完全限定名称

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

关于java - 在 Eclipse 中重写方法时在运行时从父类(super class)型定义泛型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26678548/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com