我会在这里解决问题。 这是我到目前为止的方法:
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;
}
答案 0 :(得分:1)
您应该避免一般使用数组,在这种情况下它根本不起作用。
使用List<T>
(或Set<T>
)代替数组可以解决所有问题。
除了评论:
我不确定你在做什么,但似乎不是让sets
包含(String, T)
对的列表,而是Map<String, T>
。您不需要自己的方法getAllValue()
,因为map.values()
会返回所有Collections<T>
的{{1}}。