我很新來Java的泛型編程。我不明白爲什麼不能創建泛型類型的數組。
爲什麼拋出Object []數組錯誤?
T[] a = new T[size]; //why does this give an error?
如果泛型類型意味着通用佔位符T
將由一個類名在運行時進行更換,是什麼阻止了我們創建具有通用引用數組?
有點搜索之後,我發現了一個解決辦法
T[] a = (T[])new Object[size]; //I don't get how this works?
雖然我找到了一個解決方案,我仍然無法理解從創建一個通用的陣列是什麼妨礙。 假設我創建了一個返回Object數組的函數。
public Object[] foo(){
return new Object[12];
}
然後撥打電話
String[] a = (String[])foo();
給人以ClassCastException
。但爲什麼? 它看起來不像第一行代碼,我將Object數組轉換爲T數組嗎?
T[] a = (T[])new Object[size];
如果這沒有一個小故障,爲什麼不呢?
你一共有六個問題問一個:) –
@SURESH ATTA我覺得他們所有相關:/ –
@Djack:泛型類型**並不意味着**「泛型佔位符T將在運行時被類名替換」。它在**運行時被'Object'替換**。 Java泛型與C++模板的工作方式不同。 –