如何构造参数化类型的数组?

时间:2011-12-31 16:36:53

标签: java arrays types constructor

我会在这里解决问题。 这是我到目前为止的方法:

public T[] getAllValues() {
    Serializable[] result = new Serializable[sets.size()];
    for (int i = 0; i < sets.size(); i++) {
        result[i] = sets.get(i).getValue();
    }   
    return (T[]) result;
}

'T'是扩展Serializable的参数化类型。 'sets'是一个ArrayList,它包含一个存储String(key)和T(value)的类型, 所以getValue()返回一个T. 在这个方法中,我想返回一个数组中的所有Ts,所以我真正想做的事情看起来更像是这样:

public T[] getAllValues() {
    T[] result = new T[sets.size()];
    for (int i = 0; i < sets.size(); i++) {
        result[i] = sets.get(i).getValue();
    }
    return result;
}

因此,串联到T阵列的Serializable数组只是一种解决方案,但不幸的是它不起作用。但与此同时,我不能使用第二个版本,因为

new T[int];
当参数化类型时,

显然不可能构造。这是为什么? 更重要的是:我该如何解决它?

提前谢谢

编辑:我解决了这个问题,这就是我提出的问题:

public T[] getAllValues(T[] typearray) {
    for (int i = 0; (i < typearray.length) && (i < sets.size()); i++) {
        typearray[i] = sets.get(i).getValue();
    }
    return typearray;
}

1 个答案:

答案 0 :(得分:1)

您应该避免一般使用数组,在这种情况下它根本不起作用。

使用List<T>(或Set<T>)代替数组可以解决所有问题。

除了评论:
我不确定你在做什么,但似乎不是让sets包含(String, T)对的列表,而是Map<String, T>。您不需要自己的方法getAllValue(),因为map.values()会返回所有Collections<T>的{​​{1}}。