使用Class对象创建通用二维数组
我有构造函数中提供的Class
对象的generics类型。 我想在这个构造函数中创建二维数组T[][]
,这有可能吗?
与如何在Java中创建通用数组相同? 但扩展到2D:
import java.lang.reflect.Array; public class Example { private final Class extends T> cls; public Example (Class extends T> 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
创建具有指定组件类型和尺寸的新数组。