为什么在使用 List Iterator 的 next 方法时出现不兼容的类型错误,而在使用 List 的 get 方法时却没有?

Why am I getting an incompatible type error when using the List Iterator's next method but not when I use List's get method?

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 方法。但是我得到了这个错误:incompatible types: Object cannot be converted to 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 方法 return 都是同一类型,但只有后者有效。我敢肯定原因很简单,我只是到目前为止还没有弄明白。

谢谢,

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

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

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

list1.addAll(list2);