Java 创建访问单个特定类型的泛型数组
我想将泛型类型的Java 创建访问单个特定类型的泛型数组,java,arrays,generics,casting,arraylist,Java,Arrays,Generics,Casting,Arraylist,我想将泛型类型的ArrayList转换为泛型类型的数组(相同的泛型类型)。例如,我有ArrayList,我想获得MyGeneric[] 我尝试了使用toArray方法和铸造: (MyGeneric<TheType>[]) theArrayList.toArray() 不起作用。IDE声明,Class和Class首先创建一个您类型的数组,然后您应该调用: T[]toArray(T[]a) 返回一个数组,该数组以正确的方式包含此列表中的所有元素 顺序(从第一个元素到最后一个元素);的
ArrayList
转换为泛型类型的数组(相同的泛型类型)。例如,我有ArrayList
,我想获得MyGeneric[]
我尝试了使用toArray
方法和铸造:
(MyGeneric<TheType>[]) theArrayList.toArray()
不起作用。IDE声明,
Class
和Class首先创建一个您类型的数组,然后您应该调用:
T[]toArray(T[]a)
返回一个数组,该数组以正确的方式包含此列表中的所有元素
顺序(从第一个元素到最后一个元素);的运行时类型
返回的数组是指定数组的数组
阅读说明书:
如果您的数组比列表短,则该方法将分配并返回一个新数组;如果数组长于列表,则数组中的其余项将设置为null
-----------范例----------
ArrayList列表;
//......
MyGeneric[]returnedArray=新建MyGeneric[list.size()];//无法创建常规数组。对错误的警告。别介意,你可以抑制它,也可以忽略它。
returnedArray=list.toArray(returnedArray);//聪!您得到了包含列表中所有元素的MyGeneric[]数组。
什么是“先创建您类型的数组”?既然我有ArrayList
,那么T
应该是type
还是MyGeneric
?因为我不明白该方法是如何工作的,所以您能给出一个使用示例吗。@Bakuriu t应该是MyGeneric您也可以执行new MyGeneric[list.size()]
以避免使用原始类型
Class<MyGeneric<TheType>> test = (new MyGeneric<TheType>()).getClass();
Class<? extends MyGeneric> test = (new MyGeneric<TheType>()).getClass();
MyGeneric[] data = (MyGeneric[]) Array.newInstance(test, theSize);
for (int i=0; i < theSize; i++) {
data[i] = theArrayList.get(i);
}
return data;
<T> T[] toArray(T[] a)
ArrayList<MyGeneric<TheType>> list;
//......
MyGeneric<TheType>[] returnedArray = new MyGeneric[list.size()]; // You can't create a generic array. A warning for an error. Don't mind, you can suppress it or just ignore it.
returnedArray = list.toArray(returnedArray); // Cong! You got the MyGeneric<TheType>[] array with all the elements in the list.