我的第一个清单是
List<A> a
我有另一个列表
List<X.Y.Z> b
如何将第一个列表添加到第二个列表?
我尝试了演员 -
b.add(List<X.Y.Z>)a) - did not work
尝试通过第一个列表的迭代添加 - 无法正常工作
肯定错过了什么?答案 0 :(得分:4)
除非A
和X.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()
方法。但是,除非A
是X.Y.Z
的子类,并且A
是X.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.类型。