java - 带有类型列表和继承的方法

标签 java list inheritance typed

我在使用从另一个(类型化)类继承的类型化 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/

相关文章:

从 R 中的列表列表中删除元素

c++ - 如果不使用虚函数,使用基类指针指向派生类的任何目的

java - IntelliJ 社区版中的 Spring Boot 项目

java - 使用内部联接的简单 hql 命名查询

java - 我们如何计算双向链表(循环列表)中的元素,其中我们不知道初始状态,也不知道头/尾在哪里‽

c++ - 更紧密地打包位域

scala - 使用 Scala 的私有(private) final 修饰符?

java - 使用单个注释在根和调度程序应用程序上下文中自动配置 beans

java - 使用反射访问成员变量

Android 滑动列表