2011-12-27 122 views
0

給定3個變量(homeNumber,mobileNumber和workNumber),它們可以爲null,但其中至少有一個是String,我需要返回一個String數組,以便稍後在Android上使用它對話。我遇到麻煩了。我嘗試在ArrayList中刪除所有的空元素,這就像我想要的那樣只保留一個ArrayList的ArrayList,但是當試圖將其更改爲一個Array時,我在最後一行得到一個ClassCast異常。ArrayList到字符串數組

ArrayList numberList = new ArrayList(); 
numberList.add(homeNumber); 
numberList.add(mobileNumber); 
numberList.add(workNumber); 
numberList.removeAll(Collections.singleton(null)); 

final String[] items= (String[]) numberList.toArray(); 

任何想法如何解決這一問題?

+2

您應該檢查我f在插入數組之前,您在數組列表中添加的數據爲空。 爲什麼你想在String Array中轉換你的ArrayList? 爲什麼你不建立一個ArrayList ? –

+0

您不能將非泛型ArrayList轉換爲給定對象的數組,因爲它可以包含不同類的對象。鑑於這是Android代碼,爲什麼不像Jeremy所述的那樣使用泛型? –

回答

8
String[] items = new String[numberList.size()]; 
numberList.toArray(items); 
+0

或者您需要遍歷列表並通過增加數組索引來填充String []。你不能直接做最後的String [] items =(String [])numberList.toArray();因爲toArray的返回類型是object [] – kosa

0

ArrayList.toArray()的返回類型是Object [],除非您傳遞數組作爲第一個參數。在這種情況下,返回類型與傳遞的數組具有相同的類型,並且如果數組足夠大,則使用它。這樣做:

final String[] items= (String[])numberList.toArray(new String[3]) 
+0

該列表中可能沒有完全3個項目,因爲他從中刪除了空值。 –

0

變化

ArrayList numberList = new ArrayList(); 

List<String> numberList = new ArrayList<String>(); 
0

使用List類的另一種方法toArray()

numberList.toArray(new String[numberList.size()]); 
+0

如果您將它用作適配器(它是我所做的)的參數,這會起作用,但是如果您希望數組持續超過這行代碼,則必須實例化它分開。 – Pyrodante

+0

該方法的返回正好是創建的數組。他可以將它分配給String []項目 –

1

你可以做兩件事情之一:

通行證在你想要得到的陣列的類型(有沒有需要實例全長陣列,性能是相同的,不管):

final String[] items= (String[]) numberList.toArray(new String[0]); 

然而,更好的方法是使用泛型:

List<String> numberList = new ArrayList<String>(); 

final String[] items= (String[]) numberList.toArray();