Java:将集合类型转换为子类型

假设类扩展类 。我有一个我碰巧知道包含的实例。有没有办法把BAList<A>BList<A>List<B>

似乎我唯一的选择是迭代集合,一次转换一个元素,创建一个新集合。这似乎是对资源的完全浪费,因为类型擦除使得这在运行时完全没有必要。


答案 1

您可以通过非类型化列表接口进行强制转换:

List<A> a = new ArrayList<A>();
List<B> b = (List)a;

答案 2

你可以试试这个 :

List<A> a = new ArrayList<A>();
List<B> b = (List<B>) (List<?>) a;

它基于jarnbjo的答案,但不要使用原始列表。