是否可以在Java中创建泛型类型的2D锯齿状数组?

时间:2014-09-29 08:07:19

标签: java generics multidimensional-array jagged-arrays

是否可以使用Java中指定的大小创建泛型类型参数的二维数组?

为了说明,我们可以创建一个这样的数组:

T[][] array = new T[x][];

3 个答案:

答案 0 :(得分:3)

你提及" generic"在您的问题中,使用标识符T作为您的类型,因此我假设您正在讨论创建泛型类型参数的数组。

你不能用Java做到这一点。数组和泛型不能很好地混合。您可以使用反射(see this question)来执行此操作,但您可以更轻松地使用集合类来执行此操作。这将是一个列表列表,以获得2D衣衫褴褛的容器。

答案 1 :(得分:1)

不是泛型,但使用已知的类是可能的。对于通用,我建议使用ArrayList或类似的。

 String[][] array = new String[2][];

可以这样使用:

array[0] = new String[1];
array[1] = new String[4];
array[0][0] = "Hello 0,0";
array[1][1] = "Hello 1,1 ";

System.out.println(array[0][0]);
System.out.println(array[1][1]);

答案 2 :(得分:0)

您需要一个通用的多维数组。你不能创建一个。但是,您可以创建一个Object数组,然后进行投射。这是创建通用数组的“常用”方法:

@SuppressWarnings("unchecked")
T[][] array = (T[][])new Object[x][];

您需要@SuppressWarnings("unchecked")因为演员表不安全并且已经过检查。从类型理论的角度来看,它甚至是“错误的”(类型Object的数组不是T的数组),但Java的类型系统具有这种不一致性,这是处理它的方法