我有Class<T>
构造函数中提供的对象的泛型类型。我想在这个构造函数中创建二维数组T[][]
,但这可能吗?
问问题
12284 次
2 回答
16
与如何在 Java 中创建泛型数组相同?但扩展到二维:
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()
。
于 2013-08-07T18:36:38.317 回答
2
您必须使用反射,但有可能:http://docs.oracle.com/javase/7/docs/api/java/lang/reflect/Array.html#newInstance%28java.lang.Class,%20int.. .%29
创建具有指定组件类型和尺寸的新数组。
于 2013-08-07T18:36:23.363 回答