我在构造函数中提供了Class<T>
对象的泛型类型。我想在这个构造函数中创建二维数组T[][]
,这有可能吗?
答案 0 :(得分:16)
与How to create a generic array in Java?相同,但扩展为2D:
import java.lang.reflect.Array;
public class Example <T> {
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>(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()
。
答案 1 :(得分:2)
你必须使用反射,但有可能:http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html#newInstance%28java.lang.Class,%20int...%29
创建具有指定组件类型和尺寸的新数组。