为什么在使用列表迭代器的下一个方法时出现不兼容的类型错误,而在使用 List 的 get 方法时却没有?


public static void main(String args[]) 
{
ArrayList<String> names = new ArrayList<String>();
names.add("Brett");

ArrayList<String> names2 = new ArrayList<String>();
names2.add("John");

append(names, names2);

}
public static <E> void append(List<E> list1, List<E> list2)
{
Iterator list2Iterator = list2.listIterator();
while(list2Iterator.hasNext())
{
list1.add(list2Iterator.next());
}
}

我被要求将一个列表的元素附加到另一个列表中。我使用list2的迭代器来检索每个元素,并将它们传递给list1的add方法。但我得到了这个错误:不兼容的类型:对象不能转换为E。但是,如果我修改了append方法:

public static <E> void append(List<E> list1, List<E> list2)
{
for (int i = 0; i < list2.size(); i++)
list1.add(list2.get(i));
}

它工作得很好。列表迭代器和get方法都返回相同的类型,但只有后者有效。我相信原因很简单,只是到目前为止我还没有弄清楚。

谢谢,

问题是,在您的代码中,当您获得列表迭代器时,您会丢失类型参数。

public static <E> void append(List<E> list1, List<E> list2) {
Iterator<E> list2Iterator = list2.listIterator();
while(list2Iterator.hasNext()) {
list1.add(list2Iterator.next());
}
}

但是您应该避免手动将集合1乘1的所有元素添加到另一个集合中。这里有一个更好的解决方案:

list1.addAll(list2);

最新更新