我有一个方法setData(ArrayList<super> list)
,所以任何想要设置数据的人都可以有自己的实体,只需要从超类扩展。但是当他们调用setData
时,他们如何将ArrayList转换为ArrayList?
现在我使用setData(new ArrayList(list)),但这不是一个好的解决方案。
任何人都可以告诉我如何转换或其他解决方案可以避免这个问题。非常感谢!
答案 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将强制编译器接受方法调用。作为额外的好处,您不会因创建新数组列表而遭受性能损失。