[英]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.