演员为什么失败?

时间:2012-04-02 04:45:05

标签: java

我正在尝试这样做

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;

5 个答案:

答案 0 :(得分:9)

您的代码失败的原因是因为.toArray()返回了Object[]类型的数组,您无法将其转换为String[]。要修复它,请使用另一个toArray(T[] a)

stringList.toArray(new String[0]);

答案 1 :(得分:8)

最好再试试这个method

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

这样返回的数组就是你需要的确切类型,不需要强制转换。您调用的method会返回Object[],而非String[],而您尝试执行的广告无效。

答案 2 :(得分:3)

由于toArray()类的List方法返回Object[]而不是String[],并且您无法从Object[]投射到String[]。但是,正确的方法是:

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

或:

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

答案 3 :(得分:2)

您无法强制转换为String数组。你想要:

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

答案 4 :(得分:2)

ArrayList<T>.toArray()方法返回类型Object的数组,因为这是完全可以接受的事情。事实上,由于类型擦除,它是唯一可以做的事情。

如果要获取String类型的数组,请调用ArrayList<T>.toArray(T[])方法。在你的情况下,你会这样称呼它:

stringList.toArray(new String[3]);

调用它会将ArrayList内容填充到提供的String数组中。