使用Class对象创建通用二维数组

我有构造函数中提供的Class对象的generics类型。 我想在这个构造函数中创建二维数组T[][] ,这有可能吗?

与如何在Java中创建通用数组相同? 但扩展到2D:

 import java.lang.reflect.Array; public class Example  { private final Class cls; public Example (Class cls) { this.cls = cls; } public void arrayExample () { // a [10][20] array @SuppressWarnings("unchecked") T[][] array = (T[][])Array.newInstance(cls, 10, 20); System.out.println(array.length + " " + array[0].length + " " + array.getClass()); } public static final void main (String[] args) { new Example(Integer.class).arrayExample(); } } 

在阅读上面的JAB注释后请注意:要扩展到更多维度,只需将[]和维度参数添加到newInstance()(cls是一个类,d1到d5是整数):

 T[] array = (T[])Array.newInstance(cls, d1); T[][] array = (T[][])Array.newInstance(cls, d1, d2); T[][][] array = (T[][][])Array.newInstance(cls, d1, d2, d3); T[][][][] array = (T[][][][])Array.newInstance(cls, d1, d2, d3, d4); T[][][][][] array = (T[][][][][])Array.newInstance(cls, d1, d2, d3, d4, d5); 

有关详细信息,请参见Array.newInstance()

你必须使用reflection,但它是可能的: http : //docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html#newInstance%28java.lang.Class,%20int .. %29

创建具有指定组件类型和尺寸的新数组。