我有一个名为“父亲”的简单POJO和另一个名为“Son”的人,它扩展了“父亲”,这是最简单的类继承示例。
现在我有List<Son>
,我需要将其投放到List<Father>
。
我该怎么办?
修改
抱歉命名不好,我没有解释自己。 人和员工会是一个更好的例子。或者产品和计算机。
答案 0 :(得分:3)
您不能在此处使用演员*,如上所述。您可以编写一个小帮助方法来进行转换(即副本):
private static List<Father> getListFather(List<? extends Father> list) {
return new ArrayList<> (list);
}
*实际上你可以 - 参考另一个答案:List<Father> listFather = (List<Father>) (List<? extends Father>) listSons;
答案 1 :(得分:3)
假设你可以用演员表做一下,这会导致以下问题:
List<Son> ls = ...;
List<Father> lf = (List<Son>) ls;
lf.add(new Father());
ls
和lf
都指向同一个实例,因此您刚刚将一个Father
对象添加到了Sons列表中。
答案 2 :(得分:3)
2条建议:
有一个接口,比如Person
,Father
(以及Son
)实现。两者都使用List<Person>
。
使用集合构造函数创建new List<Father>
,例如List<Father> fathers = new ArrayList<Father>(sons);
答案 3 :(得分:2)
这似乎有效:
static class Father {};
static class Son extends Father{};
public void test() {
List<Son> sons = new ArrayList<>();
// Not allowed.
//List<Father> sons2 = (List<Father>)sons;
// Two step.
List<? extends Father> sons3 = sons;
List<Father> sons4 = (List<Father>)sons3;
// Direct.
List<Father> sons5 = (List<Father>)((List<? extends Father>)sons);
}