gpt4 book ai didi

java - 在 Java 中转换泛型数组

转载 作者:行者123 更新时间:2023-11-29 03:58:11 25 4
gpt4 key购买 nike

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/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com