如何将超类型列表转换为子类型列表?

2022-08-31 05:12:01

例如,假设您有两个类:

public class TestA {}
public class TestB extends TestA{}

我有一个返回a的方法,我想将该列表中的所有对象都转换为,以便我最终得到一个.List<TestA>TestBList<TestB>


答案 1

简单地铸造几乎工作;但它不起作用,因为您无法将一个参数的泛型类型转换为另一个参数。但是,您可以通过中间通配符类型进行强制转换,并且将允许该类型(因为您可以向通配符类型强制转换和从中间强制转换,只需使用未选中的警告):List<TestB>

List<TestB> variable = (List<TestB>)(List<?>) collectionOfListA;

答案 2

泛型的强制转换是不可能的,但是如果您以另一种方式定义列表,则可以存储在其中:TestB

List<? extends TestA> myList = new ArrayList<TestA>();

使用列表中的对象时,您仍然需要执行类型检查。