具有类型列表和继承的方法

Pom*_*Pom 6 java inheritance list typed

我有一个带有类型List参数的方法的麻烦,继承自另一个(类型)类.

让我们保持简单:

public class B<T> {
  public void test(List<Integer> i) {
  }
}
Run Code Online (Sandbox Code Playgroud)

B类有一个无用的泛型T,而test()需要一个整数列表.

如果我这样做:

public class A extends B {
  // don't compile
  @Override
  public void test(List<Integer> i) {
  }
}
Run Code Online (Sandbox Code Playgroud)

我得到一个" 类型A的方法测试(列表)必须覆盖或实现超类型方法 "错误,这不应该发生.

但删除列表的类型有效...虽然它不依赖于类泛型.

public class A extends B {
  // compile
  @Override
  public void test(List i) {
Run Code Online (Sandbox Code Playgroud)

并且还定义下面的无用通用以使用类型列表

public class A extends B<String> {
  // compile
  @Override
  public void test(List<Integer> i) {
Run Code Online (Sandbox Code Playgroud)

所以我很无能,B的泛型应该对test()列表的类型没有影响.有没有人知道发生了什么?

谢谢

Joe*_*ckx 8

您正在扩展B的原始类型,而不是通用类型.原始的有效地没有test(List<Integer> i)方法,而是test(List)方法.

如果切换到原始类型,则所有泛型都将被原始替换,无论其类型是否已填充.

要做得好,做

 public class A<T> extends B<T>
Run Code Online (Sandbox Code Playgroud)

这将使用泛型类型B<T>,其中包括您要覆盖的方法.