2012-04-02 67 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阵列。