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[]
的子类型,因此转换是非法的。
要创建特定类型的数组,您可以使用反射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);
关于java - 在 Java 中转换泛型数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5133914/