2017-06-17 41 views
-1

我有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

我看了這個,並認爲我是安全的從原始類型的問題由ins將LinkedList轉換爲A類型,並且LinkedList將返回一個A,而不是Object,但它仍然給我帶來相同的編譯器錯誤。這是爲什麼?

+0

這是第15行? –

回答

1

您必須指定迭代器的仿製藥:

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

嘗試投it.next()A.以arrayA [i] =(A)it.next();

1

因爲,你有沒有低於線

Iterator it = A.iterator(); 

你需要指定泛型返回的A實例指定類型it.next();回報Object實例。

Iterator<A> it = A.iterator(); 
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(); 
    } 
} 
相關問題