4

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

4

2 回答 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 回答