【发布时间】:2016-04-26 13:30:42
【问题描述】:
我想创建一个 (10x10) 二维泛型数组的实例:
objArray<T>[][] = new T[10][10]
显然,由于java's type erasure,这不起作用。
我发现这个解决方法建议for a 1D array,类似于:
// a generic class with a method to create an array of the parameterised type
public class GenericArrayTest<T>{
// declare the class instance
private Class<T> tClass;
// code to initialise tClass
// returns an array of the parameterised type
public <T> T[] returnArray(){
return (T[])java.lang.reflect.Array.newInstance(tClass, 10);
}
}
这适用于一维数组,但是当我为二维数组修改它时:
public <T> T[][] returnArray(){
return (T[][])java.lang.reflect.Array.newInstance(tClass, 10, 10);
}
第二个维度为空。也就是说,填充了 T[1-10],但 T[][1-10] 为空。任何人都可以提出解决此问题的提示吗?如果没有直接的方法,我可能会硬着头皮在我的应用程序中摆脱泛型:(
编辑:*******
以下有用的答案让我得出了答案。我的数组声明确实工作正常,但这只会设置一个空的内存块。必须为数组中的每个值实例化一个对象:
for (int i=0; i<10; i++){
for (int j=0; j<10; j++){
myarray[i][j] = this.tClass.newInstance();
【问题讨论】:
-
"谁能提出解决这个问题的建议?"不混合泛型和数组。他们真的玩得不好(例如,如果
T是List<String>怎么办?)