2011-12-31 96 views
1

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

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; 
} 
+4

總之:不可能創建通用數組。請參閱http://stackoverflow.com/questions/529085/java-how-to-generic-array-creation – Robin 2011-12-31 16:39:04

+0

歡迎使用Java泛型。 – 2011-12-31 16:41:10

+0

@Tom在編輯中關於您的解決方案:您應該避免使用輸入參數作爲輸出。這對於其他開發人員或未來您來說是相當混亂的。返回相同的陣列也增加了混淆。 – toto2 2011-12-31 18:16:33

回答

1

您應該避免使用一般的陣列,它不會在所有的工作中這個案例。使用List<T>(或Set<T>)而不是數組解決所有問題。

除了評論:
我不知道你在做什麼,但似乎不是有sets包含對(String, T)的列表,你可以有一個Map<String, T>。您將不需要您的方法getAllValue(),因爲map.values()返回的所有T's。

+0

我解決了這個問題,我確實使用了一個數組。 – 2011-12-31 17:56:18

相關問題