从LinkedList输入不匹配的返回项

时间:2017-06-17 18:17:33

标签: java object linked-list

我有一个A类的对象:

public class A
{
    private int num;
    private char color;
}

我尝试使用Iterator从LinkedList读取数组,如下所示:

public static void main()
{
    LinkedList<A> A = new LinkedList<A>();

    //make some objects of class A

    A.add(A1);
    A.add(A2);
    A.add(A3);

    Iterator it = A.iterator();

    A[] arrayA = new A[3];

    for (int i = 0; i < 3; i++) 
        {
           > arrayA[i] = it.next();
        }
}

上面代码中标有>的行给出了以下编译错误:Type mismatch: cannot convert from Object to A

我查了一下,认为通过将LinkedList实例化为A类并且LinkedList将返回A而不是Object,我对原始类型的问题是安全的,但它仍然给我相同的编译器错误。那是为什么?

4 个答案:

答案 0 :(得分:1)

您必须指定Iterator的泛型:

Iterator<T> it = A.iterator();

因为您没有明确指定它,迭代器it存储原始类型(Object)。

如果您不想指定遗传学(但我绝对建议您这样做),您必须显式转换从it.next()返回的值:

Iterator it = A.iterator();


for (int i = 0; i < 3; i++) {
    arrayA[i] = (A) it.next();
}

答案 1 :(得分:1)

因为,it.next();返回Object个实例,因为您未在下面指定类型

 Iterator it = A.iterator();

您需要指定泛型以返回A的实例。

 Iterator<A> it = A.iterator();

答案 2 :(得分:1)

因为你没有指定迭代器的类型,你的迭代器是原始类型,正确的代码在这里:

public static void main() {
    LinkedList<A> A = new LinkedList<A>();

    A.add(new A());
    A.add(new A());
    A.add(new A());

    Iterator<A> it = A.iterator();

    A[] arrayA = new A[3];

    for (int i = 0; i < 3; i++) {
         arrayA[i] = it.next();
    }
}

答案 3 :(得分:-1)

尝试将it.next()转换为A. arrayA [i] =(A)it.next();