亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Java 1.6:創建List <T>的數組

Java 1.6:創建List <T>的數組

冉冉說 2019-10-21 10:10:11
為什么不能創建List數組?List<String>[] nav = new List<String>[] { new ArrayList<String>() };Eclipse說“無法創建列表的通用數組”要么ArrayList<String>[] nav = new ArrayList<String>[] { new ArrayList<String>() };Eclipse說“無法創建ArrayList的通用數組”要么List<String>[] getListsOfStrings() {    List<String> groupA = new ArrayList<String>();    List<String> groupB = new ArrayList<String>();    return new List<String>[] { groupA, groupB };}但是我可以這樣做:List[] getLists() {    return new List[] { new ArrayList(), new ArrayList() };}Eclipse表示List和ArrayList是原始類型,但可以編譯...看起來很簡單,為什么不起作用?
查看完整描述

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);

如果允許使用參數化類型的數組,則前面的示例將在編譯時沒有任何未經檢查的警告,但在運行時會失敗。我們已經將類型安全性作為泛型的主要設計目標。


查看完整回答
反對 回復 2019-10-21
?
守候你守候我

TA貢獻1802條經驗 獲得超10個贊

通常,您不能創建泛型類型的數組。

其原因是,在JVM有沒有辦法檢查,只有正確的對象放入它(與ArrayStoreExceptions),因為之間的差異List<String>,并List<Integer>在運行時不存在的。

當然,您可以使用原始類型List或未綁定的通配符類型來欺騙編譯器List<?>,然后將其(使用未經檢查的類型轉換)轉換為List<String>。但是,您有責任僅將其放在List<String>其中,而不能放入其他列表。


查看完整回答
反對 回復 2019-10-21
  • 3 回答
  • 0 關注
  • 1317 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號