3 回答

TA貢獻1934條經(jīng)驗 獲得超2個贊
好吧,泛型教程為您的問題提供了答案。
數(shù)組對象的組件類型不能是類型變量或參數(shù)化類型,除非它是(無界)通配符類型。您可以聲明其元素類型是類型變量或參數(shù)化類型的數(shù)組類型,但不能聲明數(shù)組對象。
當(dāng)然,這很煩人。為避免出現(xiàn)以下情況,必須使用此限制:
// 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);
如果允許使用參數(shù)化類型的數(shù)組,則前面的示例將在編譯時沒有任何未經(jīng)檢查的警告,但在運行時會失敗。我們已經(jīng)將類型安全性作為泛型的主要設(shè)計目標(biāo)。

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