我会在这里解决问题。 这是我迄今为止的方法:我该如何构造一个参数化类型的数组?
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”是扩展序列化的参数化类型。 '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阵列只是一个想法,一个变通,但不遗憾的是工作。但与此同时,我不能使用第二个版本,因为
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;
}
总之:不可能创建通用数组。请参阅http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation – Robin 2011-12-31 16:39:04
欢迎使用Java泛型。 – 2011-12-31 16:41:10
@Tom在编辑中关于您的解决方案:您应该避免使用输入参数作为输出。这对于其他开发人员或未来您来说是相当混乱的。返回相同的阵列也增加了混淆。 – toto2 2011-12-31 18:16:33