gpt4 book ai didi

java - 泛型的二维数组创建

转载 作者:行者123 更新时间:2023-11-30 08:37:55 25 4
gpt4 key购买 nike

我想创建一个 (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();

最佳答案

当然是null,方法应该把哪些实例放在那里?

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

一维数组

  • T[0] -> 空
  • T[1] -> 空

二维数组

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

关于java - 泛型的二维数组创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36866464/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com