二维数组创建泛型

时间:2016-04-26 13:30:42

标签: java arrays generics

我想创建一个(10x10)2d泛型数组的实例:

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

第二个维度为null。也就是说,填充了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();

2 个答案:

答案 0 :(得分:1)

当然它们是null,这个方法应放在哪个实例中?

数组只是一系列保留的内存地址。 使用T []类型的数组实例初始化T [1-10] []部分。 T [] [1-10]是指向对象的指针数组 - 为空。您仍然需要使用实例填充它。

1-dim array

  • T [0] - &gt;空
  • T [1] - &gt;空

2-dim array

  • T [0] - &gt; T [] {null,null,null,null ...}
    • T [0] [0] - &gt;空
    • T [0] [1] - &gt;空

答案 1 :(得分:1)

public class GenericArrayTest<T>{   

    private final Class<T> cls; 

    public GenericArrayTest (Class<T> cls) {
        this.cls = cls;
    }

    public <T> T[][] returnArray(){
    T[][] array = (T[][])Array.newInstance(cls,30,40);
    return array;
    }

我对您的代码进行了一些更改,这可能会对您有所帮助。检查一下