[英]casting a generic array in 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;
謝謝。
Object[]
不是AnyType[]
的子類型,因此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 )
因此,如果您有AnyType
類型的Class
實例:
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);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.