为什么不起作用?
List<String> lista = new ArrayList<>();
lista.add("Lol");
lista.add("ball");
String [] array = (String[])lista.toArray();
它抛出一个RunTimeException (ClassCastException)
,我知道还有另一种方法可以返回List中包含的对象,但幕后发生了什么?我的意思是我正在构建一个对象数组,实际上是一个字符串数组的字符串数组。所以应该编译,但事实并非如此。
提前谢谢。
答案 0 :(得分:4)
该版本的toArray()返回Object[]
。即使其中的所有对象都是字符串,也无法将Object数组转换为String数组。
您可以使用lista.toArray(new String[lista.size()]);
版本正确获取实际类型。
答案 1 :(得分:2)
List.toArray()
由于type erasure,我们会返回Object[]
。在运行时,您的列表不知道它是否具有String对象。从那里你可以看到错误的来源。
您无法在Object[]
String[]
答案 2 :(得分:0)
对象数组不是字符串数组,不能强制转换为一个。
检查this。
答案 3 :(得分:0)
改为使用toArray(T [] a)。
即
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 []的转换是非法的。
答案 4 :(得分:0)
列表lista = new ArrayList&lt;&gt;(); ---&GT; List lista = new ArrayList();
答案 5 :(得分:-2)
有两个toArray()版本。你可以使用另一个版本!