我有一个类 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();
}
}