Java:投收集类型的子类型[重复]
-
22-07-2019 - |
题
这个问题已经有一个答案在这里:
- 怎么你投一个列表中的超类型清单的亚型的? 16的答案
假设类 B
延伸类 A
.我有一个 List<A>
我碰巧知道 只 包含实例 B
.有没有办法我可以投的 List<A>
来一个 List<B>
?
看来我的唯一选择是以循环的集合、铸造一个元素,创造一个新的集合。这似乎是一个完全浪费资源的指定类型的删除使得这完全没有必要在运行时间。
解决方案
你可以投通过的类型列出的界面:
List<A> a = new ArrayList<A>();
List<B> b = (List)a;
其他提示
你可以试试这个:
List<A> a = new ArrayList<A>();
List<B> b = (List<B>) (List<?>) a;
它的依据是答案的jarnbjo,但是在不使用的原始名单。
一种方法来保留某些类型的安全与最低性能的影响是使用 包装纸.这个例子是关于收集、列表的情况将是非常相似,也许有一天我会写这一点。如果别人来之前我,请让我们共同的代码。
不隶属于 StackOverflow