如何在Java中将ArrayList <subClass>转换为ArrayList <super>

8

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

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

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


3
也许是ArrayList<? extends super> list - Hunter McMillen
谢谢,setData(ArrayList<? extends SuperType> list) 是我想要的。 - dreamtale
2个回答

17

这取决于您接下来想要如何使用该列表。如果您只是要从中读取数据,可以像这样声明您的方法:

setData(ArrayList<? extends SuperType> list)

你无法向那个列表中添加任何东西,因为你不知道?是什么。另一个选项是在调用你的方法时创建一个副本:

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

4

不要编写代码

setData(new ArrayList(list));

您可以简单地使用。
setData((ArrayList<super>)((Object)list));

将列表先转换为对象,然后再转换为ArrayList将强制编译器接受方法调用。作为额外的好处,您不需要承担创建新ArrayList的性能开销。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接