簡體   English   中英

在java中轉換泛型數組

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM