如何在java </super> </subclass>中将ArrayList <subclass>转换为ArrayList <super>

时间:2012-03-12 04:04:16

标签: java arraylist

我有一个方法setData(ArrayList<super> list),所以任何想要设置数据的人都可以有自己的实体,只需要从超类扩展。但是当他们调用setData时,他们如何将ArrayList转换为ArrayList?

现在我使用setData(new ArrayList(list)),但这不是一个好的解决方案。

任何人都可以告诉我如何转换或其他解决方案可以避免这个问题。非常感谢!

2 个答案:

答案 0 :(得分:17)

这取决于您之后要对列表执行的操作。如果你只是想从中读取,你可以这样声明你的方法:

setData(ArrayList<? extends SuperType> list)

但是,您无法向该列表添加任何内容,因为您不知道?是什么。另一种选择是在调用方法时创建副本:

List<SubType> subtypeList = ...;
setData(new ArrayList<SuperType>(subtypeList));

答案 1 :(得分:4)

而不是编码

setData(new ArrayList(list));

你可以简单地使用

setData((ArrayList<super>)((Object)list));

首先将列表转换为Object然后再转换为ArrayList将强制编译器接受方法调用。作为额外的好处,您不会因创建新数组列表而遭受性能损失。