Collection.toArray()方法,详细介绍

时间:2013-08-28 08:08:48

标签: java arrays list arraylist toarray

为什么不起作用?

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

它抛出一个RunTimeException (ClassCastException),我知道还有另一种方法可以返回List中包含的对象,但幕后发生了什么?我的意思是我正在构建一个对象数组,实际上是一个字符串数组的字符串数组。所以应该编译,但事实并非如此。 提前谢谢。

6 个答案:

答案 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()版本。你可以使用另一个版本!