我将在这里直接讨论这个问题。 这是我到目前为止的方法:
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' 是扩展 Serialized 的参数化类型。 'sets' 是一个 ArrayList,其中包含存储 String(键)和 T(值)的类型, 所以 getValue() 返回一个 T。 在这个方法中,我想返回数组中的所有 T,所以我实际上想做的看起来更像是这样:
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 数组只是一种解决方法,但不幸的是不起作用。但同时,我无法使用第二个版本,因为
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;
}
最佳答案
一般情况下您应该避免使用数组,在这种情况下它根本不起作用。
使用List<T>
(或 Set<T>
)而不是数组可以解决您的所有问题。
旁白评论:
我不确定你在做什么,但似乎不是 sets
包含对列表 (String, T)
,你可以有一个 Map<String, T>
。你不需要你的方法getAllValue()
自 map.values()
返回 Collections<T>
全部T
的。
关于java - 如何构造参数化类型的数组?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689246/