在java中将子类型泛型返回给父类型泛型

Pub*_*nda 1 java generics inheritance

我问了很多与此相关的问题,但无法解决我的问题。

这是我的问题。

我有一个父抽象类。

public abstract class Parent{ }
Run Code Online (Sandbox Code Playgroud)

我还有另外两个子类,它们是从上面的父类扩展而来的。

public class ChildOne extends Parent{}
public class ChildTwo extends Parent{}
Run Code Online (Sandbox Code Playgroud)

在另一堂课中,我使用这三个课程,如下所示。

public class A{ 
   public List<ExcelRecord<Parent>> getExcelRecords() {
      ChildOne childone = new ChildOne();
      List<ExcelRecord<ChildOne>> list = new ArrayList<>();

      // some logic here

      return list; // **compilation here**
   }
}
Run Code Online (Sandbox Code Playgroud)

该代码产生以下编译错误:

required: List<ExcelRecord<Parent>>
provided: List<ExcelRecord<ChildOne>>
Run Code Online (Sandbox Code Playgroud)

我需要将子类型泛型返回到父类型泛型。我怎样才能实现这个目标?

请注意,此方法的返回值正在旧代码中使用,无法进行相应更改。它应该保留List<ExcelRecord<Parent>>

Pau*_*aul 7

在返回类型中使用通配符。该通配符将接受任何扩展父类的类


public List<ExcelRecord<? extends Parent>> getExcelRecords() {
   //...
}

Run Code Online (Sandbox Code Playgroud)

请随时查看Java 泛型常见问题解答以了解更多详细信息