今天在練習java集合LinkedList類庫中的方法是遇到一個很奇怪的問題,請看下面代碼:LinkedList<String> llString=new LinkedList<String>();
String[] s=llString.toArray();Myeclipse報錯:Type mismatch: cannot convert from Object[] to String[]于是我進行了強制類型轉換,請看代碼:LinkedList<String> llString=new LinkedList<String>();
String[] s=(String[]) llString.toArray();編譯器不報錯了!幫助文檔中對LinkedList的ToArray()方法是這么描述的:public <T> T[] toArray(T[] a)返回以適當順序(從第一個元素到最后一個元素)包含此列表中所有元素的數組;返回數組的運行時類型為指定數組的類型。如果指定數組能容納列表,則在其中返回該列表。否則,分配具有指定數組的運行時類型和此列表大小的新數組。如果指定數組能容納列表,并有剩余空間(即數組比列表元素多),則緊跟在列表末尾的數組元素會被設置為 null。(只有 在調用者知道列表不包含任何 null 元素時,才可使用此方法來確定列表的長度。)像 toArray() 方法一樣,此方法充當基于數組的 API 與基于 collection 的 API 之間的橋梁。更進一步說,此方法允許對輸出數組的運行時類型上進行精確控制,在某些情況下,可以用來節省分配開銷。假定 x 是只包含字符串的一個已知列表。以下代碼可用來將該列表轉儲到一個新分配的 String 數組: String[] y = x.toArray(new String[0]);注意,toArray(new Object[0]) 和 toArray() 在功能上是相同的。上面描述中也舉例子, String[] y = x.toArray(new String[0]);沒有進行強制轉換類型。我的疑問:上面我在聲明 llString時,已經使用了范型來防止進行類型轉換,為何在ToArray()前還要進行強制類型換換呢?這樣范型的作用不久丟失了嗎?謝謝!
2 回答

慕斯709654
TA貢獻1840條經驗 獲得超5個贊
LinkedList<String> llStrings = new LinkedList<String>(); for(int i=0;i<100;i++){ llStrings.add(""+i); } String[] arry = new String[llStrings.size()]; arry = llStrings.toArray(arry); System.out.println(arry.length);
這樣就可以了,它需要指定要轉換的類型
toArray(T[] a) 和toArray()是不一樣的。
添加回答
舉報
0/150
提交
取消