3 回答

TA貢獻1934條經驗 獲得超2個贊
好吧,泛型教程為您的問題提供了答案。
數組對象的組件類型不能是類型變量或參數化類型,除非它是(無界)通配符類型。您可以聲明其元素類型是類型變量或參數化類型的數組類型,但不能聲明數組對象。
當然,這很煩人。為避免出現以下情況,必須使用此限制:
// Not really allowed.
List<String>[] lsa = new List<String>[10];
Object o = lsa;
Object[] oa = (Object[]) o;
List<Integer> li = new ArrayList<Integer>();
li.add(new Integer(3));
// Unsound, but passes run time store check
oa[1] = li;
// Run-time error: ClassCastException.
String s = lsa[1].get(0);
如果允許使用參數化類型的數組,則前面的示例將在編譯時沒有任何未經檢查的警告,但在運行時會失敗。我們已經將類型安全性作為泛型的主要設計目標。

TA貢獻1802條經驗 獲得超10個贊
通常,您不能創建泛型類型的數組。
其原因是,在JVM有沒有辦法檢查,只有正確的對象放入它(與ArrayStoreExceptions),因為之間的差異List<String>
,并List<Integer>
在運行時不存在的。
當然,您可以使用原始類型List
或未綁定的通配符類型來欺騙編譯器List<?>
,然后將其(使用未經檢查的類型轉換)轉換為List<String>
。但是,您有責任僅將其放在List<String>
其中,而不能放入其他列表。
添加回答
舉報