2012-04-02 113 views
3

我試圖做到這一點爲什麼演員陣容失敗?

List<String> stringList = new ArrayList<String>(); 
stringList.add("one"); 
stringList.add("two"); 
stringList.add("three"); 

(String[]) stringList.toArray(); 

爲什麼這給了我類轉換異常?

Caused by: java.lang.ClassCastException: [Ljava.lang.Object; 
+0

爲什麼使用ArrayList,如果你最終要的一個數組?從一個數組開始,向其添加元素 – Baz1nga 2012-04-02 04:55:52

回答

7

更好試試這個其他method

String[] stringArray = stringList.toArray(new String[stringList.size()]); 

以這種方式返回的數組是你所需要的確切類型,沒有投需要的。該method你調用返回一個Object[],而不是一個String[]和你想執行轉換是無效的。

+1

,甚至更好地使用'new String [stringList.size()]'。 – 2012-04-02 04:50:59

+0

@ Eng.Fouad確定,根據您的建議進行編輯。 – 2012-04-02 04:53:18

9

您的代碼失敗的原因是因爲.toArray()返回了一個Object[]類型的數組,您不能將其丟入String[]。要修復它,用其他的toArray(T[] a)

stringList.toArray(new String[0]);

+1

+1比我的更好的解釋 – 2012-04-02 04:51:59

2

不能強制轉換爲字符串數組。你想:

的String [] =測試stringList.toArray(新的String [stringList.size()]);

3

由於ListtoArray()方法返回Object[]String[],你不能從Object[]轉換爲String[]。然而,爲了做到這一點的合適的方法是:

String[] array = new String[stringList.size()]; 
stringList.toArray(array); 

或:

String[] array = stringList.toArray(new String[stringList.size()); 
2

ArrayList<T>.toArray()方法返回Object類型的數組,因爲這是做了完全可以接受的事。事實上,由於類型擦除,它是唯一可以做的事情。

如果你想獲得String類型的數組,然後調用ArrayList<T>.toArray(T[])方法。在你的情況,你會這樣稱呼它:

stringList.toArray(new String[3]); 

調用它像將在ArrayList內容塞進提供String陣列。