将一种类型的列表添加到另一种类型的列表中

时间:2013-06-28 14:51:16

标签: java

我的第一个清单是

List<A> a

我有另一个列表

List<X.Y.Z> b

如何将第一个列表添加到第二个列表?

我尝试了演员 -

b.add(List<X.Y.Z>)a) - did not work

尝试通过第一个列表的迭代添加 - 无法正常工作

肯定错过了什么?

7 个答案:

答案 0 :(得分:4)

除非AX.Y.Z之间存在继承关系,否则不能将它们放在同一个容器中,因为它们不是同一个类型

您可以使用通用超类Object作为List的类型,这将有效。

答案 1 :(得分:1)

这是不可能的,因为两个集合的引用类型不同。来自一个List的项目与另一个项目合并的唯一方法是,它们都是List<Object>类型,或者类型本身是相同的(或者至少来自相同类型)。

答案 2 :(得分:0)

原因是因为type

List<>
X.Y.Z != A

您可以使用List<Object>add()可以使用{{1}}。即使您添加了这样的内容

你必须把每个人都扔掉,然后回来。

答案 3 :(得分:0)

您需要将列表a转换为与列表b相同的类型,以便它们是相同类型的对象。查看this article

答案 4 :(得分:0)

还应该注意的是,如果你想将List<A> a的元素添加到List<X.Y.Z> b(我假设是你的意图),而不是List<A> a本身作为元素,您应该使用addAll()方法,而不是add()方法。但是,除非AX.Y.Z的子类,并且AX.Y.Z的超类,然后转换A变量,否则这将无效仅当它是实例X.Y.Z时才会起作用。

答案 5 :(得分:0)

要么使用List<Object>,要添加任何内容,要么在某处编写方法将A类型的对象转换为X.Y.Z

请注意,如果您使用List<Object>,则需要在获取对象时将其转换为所需的类:

List<Object> myList = new List<Object>;
// ...
A myObject = (A) myList.get(0);
X.Y.Z otherObject = (X.Y.Z) myList.get(1);
// ...

答案 6 :(得分:0)

考虑以下案例

    List<Integer> l1=new ArrayList<>();
    List<String> l2=new ArrayList<>();

    l1.add(2);
    l2.addAll((List<String>)l1);
你试图做同样的事情。这里你不能将整数列表转换为字符串列表。

您无法将类型列表强制转换为X.Y.Z.类型。