【问题标题】:Collection.toArray() method, detail about itCollection.toArray() 方法,有关它的详细信息
【发布时间】:2013-08-28 08:08:47
【问题描述】:

为什么不行?

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

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

【问题讨论】:

    标签: java arrays list arraylist toarray


    【解决方案1】:

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

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

    【讨论】:

    • 正如我在问题中指定的那样,我知道这一点。不过我想知道为什么。由于使用泛型很明显它是一个字符串数组
    【解决方案2】:

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

    您不能将 Object[] 类型转换为 String[]

    【讨论】:

      【解决方案3】:

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

      检查this

      【讨论】:

        【解决方案4】:

        使用 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[] 的强制转换是非法的。

        【讨论】:

          【解决方案5】:

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

          【讨论】:

            【解决方案6】:

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

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2021-04-07
              • 2019-10-16
              • 1970-01-01
              • 1970-01-01
              • 2017-08-01
              • 2012-03-19
              相关资源
              最近更新 更多