java - 在 Java 中转换泛型数组

标签 java arrays generics

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/

相关文章:

Javafx进度条

java - vertxexecute阻止不同的行为

php 判断数组是否包含大于 0 的值?

c - VLA 原型(prototype)和多维数组参数

c# - C# 中的 JSON 到 ListView

java - 这个通用 Guice 绑定(bind)方法的 TypeLiteral 等价物有什么问题?

java - 如何使用指数递归函数找到 x^63 的乘法次数以及如何证明它?

java - 使用 Maven 部署额外的 jar 文件?

java - 泛型错误 : not applicable for the arguments

c# - 在 C# 中避免代码重复 - 通过使用泛型?