首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >二维泛型阵列的创建

二维泛型阵列的创建
EN

Stack Overflow用户
提问于 2016-04-26 13:30:42
回答 2查看 277关注 0票数 2

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

代码语言:javascript
复制
objArray<T>[][] = new T[10][10]

显然,由于java类型擦除,这是行不通的。

我已经找到了一个解决办法,这表明,对于一维数组,如下所示:

代码语言:javascript
复制
// 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);
  }

}

这适用于一维数组,但当我将其修改为2D数组时:

代码语言:javascript
复制
  public <T> T[][] returnArray(){
    return (T[][])java.lang.reflect.Array.newInstance(tClass, 10, 10);
  }

第二个维度为空。也就是说,T1-10是填充的,但T是空的。有人能给出解决这个问题的建议吗?如果没有直截了当的方法,我很可能会咬紧牙关,在我的应用程序中去掉泛型:

编辑:*

下面的有帮助的答案让我得到了答案。我的数组声明确实工作正常,但这只会设置一个空内存块。必须实例化数组中每个值的对象,如下所示:

代码语言:javascript
复制
for (int i=0; i<10; i++){
    for (int j=0; j<10; j++){                
         myarray[i][j] = this.tClass.newInstance();
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-04-26 13:39:07

当然,它们是空的,方法应该放在那里的哪些实例?

数组只不过是保留的一系列内存地址。T1-10部分由T[]类型数组的实例初始化。T是指向对象的指针数组,这些指针为null。您仍然必须用实例填充它。

1-暗阵

  • T ->空
  • T1 ->空

2-暗阵

  • T -> T[] { null,null.}
    • T ->空
    • T ->空

票数 1
EN

Stack Overflow用户

发布于 2016-04-26 13:44:04

代码语言:javascript
复制
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;
    }

我已经对您的代码做了一些更改,这可能会对您有所帮助。看看这个

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36866464

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档