我在使用从另一个(类型化)类继承的类型化 List 参数的方法时遇到了一些麻烦。
让我们保持简单:
public class B<T> {
public void test(List<Integer> i) {
}
}
B 类有一个无用的泛型 T,而 test() 需要一个整数列表。
现在如果我这样做:
public class A extends B {
// don't compile
@Override
public void test(List<Integer> i) {
}
}
我收到“类型 A 的方法测试(列表)必须覆盖或实现父类(super class)型方法”错误,这是不应该发生的。
但是删除列表的类型是可行的...尽管它不依赖于泛型类。
public class A extends B {
// compile
@Override
public void test(List i) {
并且还定义了下面无用的泛型以使用类型化列表
public class A extends B<String> {
// compile
@Override
public void test(List<Integer> i) {
所以我很无能,B 的泛型应该对 test() 列表的类型没有影响。有谁知道发生了什么事吗?
谢谢
最佳答案
您正在扩展 B 的原始类型,而不是通用类型。原始的实际上没有 test(List<Integer> i)
方法,而是一个 test(List)
方法。
如果您切换到原始类型,所有 泛型都将替换为原始类型,无论它们的类型是否已填充。
要正确地做到这一点,做
public class A<T> extends B<T>
这将使用通用类型 B<T>
,其中包括您要覆盖的方法。
关于java - 带有类型列表和继承的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11245674/