【问题标题】:casting a generic array in java在java中铸造一个通用数组
【发布时间】:2011-02-27 15:04:15
【问题描述】:

实现是针对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;

谢谢。

【问题讨论】:

    标签: java arrays generics


    【解决方案1】:

    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);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-07-28
      • 1970-01-01
      • 2015-05-21
      • 1970-01-01
      • 2011-09-17
      相关资源
      最近更新 更多