【问题标题】:Why does List.toArray() return an array of Object? [duplicate]为什么 List.toArray() 返回一个 Object 数组? [复制]
【发布时间】:2012-06-13 03:53:54
【问题描述】:

可能重复:
why does List<String>.toArray() return Object[] and not String[]? how to work around this?

查看此代码示例:

    List<String> list = new ArrayList<String>();
    list.add("hello");
    list.add("world");
    Object [] array = list.toArray();

为什么toArray() 方法会返回一个Object 的数组?其他 List 方法如 get()remove() 能够返回列表中对象的类型。

【问题讨论】:

  • @SuperChafouin 请在发布问题之前做一些研究。
  • 好的,这回答了我的问题:http://stackoverflow.com/a/7909755/1075341我将我的问题标记为重复。
  • 对于那些对这个问题感兴趣的人,我发现最好的理解方法是尝试使用泛型编写您自己的toArray 实现或查看ArrayList 代码,例如。跨度>

标签: java collections


【解决方案1】:
Because array has been in Java since the beginning, while generics
were only introduced in Java 5. And the List.toArray() method was 
introduced in Java 1.2, before generics existed, so it was
specified to return Object[].

你可以用toArray(T[] a)看看Collection.toArray(T[] a)

【讨论】:

    【解决方案2】:

    您可以使用toArray(String[] a),它将返回字符串类型的数组或基本上是指定类型的数组。 toArray 方法返回对象,因为它充当基于集合和基于列表的 API 之间的桥梁。

    【讨论】:

      【解决方案3】:

      我相信返回 Object 是为了通用它很可能必须处理内存分配问题。系统不必知道您的确切类型即可分配对象数组。使用 get 和 remove 不会遇到这种情况,因为它只返回一项。

      但我会赞成你的问题,希望有人能确认我的答案或纠正我。

      【讨论】:

        【解决方案4】:

        Java List#toArray 解释了它。

        【讨论】:

        • 答案被意外格式化为代码 -- 已修复!
        • 从现在开始,请参考有效的文档。该链接指向 Java 1.4,Java 6Java 7 中有新文档。
        【解决方案5】:

        toArray() 必须构造新的数组对象并填充它。但是由于运行时泛型类型擦除toArray() 不知道元素的实际类型是什么。因为这会创建对象数组(Object[])。如果您想要类型化数组,请使用 &lt;T&gt; T[] toArray(T[] a)

        【讨论】:

          猜你喜欢
          • 2016-04-06
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-04-22
          • 2016-01-15
          • 2021-04-10
          相关资源
          最近更新 更多