创建泛型类类型的数组

时间:2013-01-12 06:19:36

标签: java arrays class

我在创建Class数组时遇到一些困难,其中Class属于泛型类型。

让我们看一个示例函数addOverlay,如下所示(假设mapSize是一个静态类变量):

public void addOverlay(Class<?> dataType) {
    dataType[][] d = new dataType[mapSize][mapSize];
    overlayMap.add(new Class[mapSize][mapSize]);
}

我收到错误dataType cannot be resolved to a type。这本身对我来说没有意义,因为dataType拥有类类型。尽管如此,我还是尝试使用语句直接插入它(它给出了与之前相同的错误):

overlayMap.add(new dataType[mapSize][mapSize]);

等等,等等。我还尝试使用dataType.getClass()

在Java中是否有办法创建类的数组,其中类是泛型类型?

2 个答案:

答案 0 :(得分:2)

您应该清楚dataType只是Class类的一个实例,它只保存有关某个类的元数据。在您的情况下,您可以像这样修改您的方法:

public void addOverlay(Class<?> dataType) {
    Object subArray = Array.newInstance(dataType, mapSize);
    Object array = Array.newInstance(subArray.getClass(), mapSize);
    for (int i = 0; i < mapSize; i++) {
        Array.set(array, i, subArray);
    }
    overlayMap.add(array);
}

答案 1 :(得分:0)

'dataType'已经是一个类了,所以在它上面调用getClass()不是答案(你只需要获得Class.class)。你可以用'java.lang.ref.Arrays.newArray()'来完成这个。