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

dre*_*ale 7 java arraylist

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

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

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

van*_*nza 17

这取决于你之后要对列表做什么.如果你只是想从中读取,你可以像这样声明你的方法:

setData(ArrayList<? extends SuperType> list)
Run Code Online (Sandbox Code Playgroud)

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

List<SubType> subtypeList = ...;
setData(new ArrayList<SuperType>(subtypeList));
Run Code Online (Sandbox Code Playgroud)