0

为什么它不起作用?

List<String> lista = new ArrayList<>();
        lista.add("Lol");
        lista.add("ball");
        String [] array = (String[])lista.toArray();

它抛出一个RunTimeException (ClassCastException),我知道还有另一种方法可以返回列表中包含的对象,但是幕后发生了什么?我的意思是我正在将一个实际上是字符串数组的对象数组转换为字符串数组。所以它应该编译,但它没有。提前致谢。

4

6 回答 6

4

该版本的 toArray() 返回Object[]. 即使其中的所有对象都是字符串,您也不能将对象数组转换为字符串数组。

您可以使用该lista.toArray(new String[lista.size()]);版本正确获取实际类型。

于 2013-08-28T08:13:05.287 回答
2

List.toArray() 返回一个Object[], 因为类型 erasure。在运行时,您的列表不知道它是否有 String 对象。从那里你可以看到错误来自哪里。

您不能将 cast anObject[]输入到 aString[]

于 2013-08-28T08:12:06.760 回答
0

对象数组不是字符串数组,不能转换为一个。

检查这个

于 2013-08-28T08:13:00.800 回答
0

使用 toArray(T[] a) 代替。

IE。

List<String> lista = new ArrayList<String>();
    lista.add("Lol");
    lista.add("ball");
    String [] array = lista.toArray(new string[1]);

这确保 toArray 返回一个 String[] 类型的数组

正如其他人所指出的, toArray() 返回一个 Object[] 类型的数组,从 Object[] 到 String[] 的强制转换是非法的。

于 2013-08-28T08:16:36.290 回答
0

List lista = new ArrayList<>(); ---> 列表列表 = 新的 ArrayList();

于 2013-08-28T08:17:55.567 回答
-2

有两个 toArray() 版本。你可以使用另一个!

于 2013-08-28T08:32:23.853 回答