我有一个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,我对原始类型的问题是安全的,但它仍然给我相同的编译器错误。那是为什么?
答案 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();