2011-02-27 66 views
1

的實施是在Java鏈表:鑄造通用陣列中的Java

public AnyType[] toArr() { 

     AnyType[] arr = (AnyType[]) new Object[size]; 

     int i = 0; 
     Node<AnyType> current = head.next; 
     while (cur != head){ 

      arr[i] = current.data;// fill the array 
      i++; 
      current = current.next; 

     }  

    return arr; 

} 

public static void main(String[] args) { 
    System.out.println(ll.toArr().toString()); 
} 

,我得到的錯誤:

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer; 

感謝。

回答

4

Object[]不是AnyType[]的子類型,因此演員劇組是非法的。

要創建一個特定類型的數組,你可以使用反射java.lang.reflect.Array.newInstance工廠方法:http://download.oracle.com/javase/1.5.0/docs/api/java/lang/reflect/Array.html#newInstance(java.lang.Class,%20int

所以,如果你有一個Class實例爲AnyType類型:

Class<? extends AnyType> anyTypeClass = ...; 
AnyType[] newArray = (AnyType[]) Array.newInstance(anyTypeClass, length); 

如果你想爲了處理原始類型,你可以用java.lang.reflect.Array來做到這一點。

Object myPrimitiveArray = Array.newInstance(Integer.TYPE, length); 

,但因爲你不能將它轉換爲你需要使用反射來修改它,以及一個Object[]

Array.set(myPrimitiveArray, 0, myPrimitiveWrapperObject);