我會在這裏解決問題。 這是我迄今爲止的方法:我該如何構造一個參數化類型的數組?
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