类型不匹配,从链接列表返回项目



我有一个类 A 的对象:

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

我正在尝试使用迭代器从 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 而不是对象,我可以避免原始类型的问题,但它仍然给我相同的编译器错误。为什么?

您必须指定迭代器的泛型:

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();
}

因为,it.next();返回Object实例,因为您没有在下面一行指定类型

 Iterator it = A.iterator();

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

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

由于未指定迭代器的类型,因此迭代器是原始类型,因此此处的代码正确:

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();
    }
}

相关内容

  • 没有找到相关文章

最新更新