2011-12-27 82 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();