如何将超类型列表转换为子类型列表?
2022-08-31 05:12:01
例如,假设您有两个类:
public class TestA {}
public class TestB extends TestA{}
我有一个返回a的方法,我想将该列表中的所有对象都转换为,以便我最终得到一个.List<TestA>
TestB
List<TestB>
例如,假设您有两个类:
public class TestA {}
public class TestB extends TestA{}
我有一个返回a的方法,我想将该列表中的所有对象都转换为,以便我最终得到一个.List<TestA>
TestB
List<TestB>
简单地铸造几乎工作;但它不起作用,因为您无法将一个参数的泛型类型转换为另一个参数。但是,您可以通过中间通配符类型进行强制转换,并且将允许该类型(因为您可以向通配符类型强制转换和从中间强制转换,只需使用未选中的警告):List<TestB>
List<TestB> variable = (List<TestB>)(List<?>) collectionOfListA;
泛型的强制转换是不可能的,但是如果您以另一种方式定义列表,则可以存储在其中:TestB
List<? extends TestA> myList = new ArrayList<TestA>();
使用列表中的对象时,您仍然需要执行类型检查。