【问题标题】:Difference between Collection.toArray() and Collection.toArray(Object obj[])Collection.toArray() 和 Collection.toArray(Object obj[]) 之间的区别
【发布时间】:2013-12-01 03:06:55
【问题描述】:

根据 toArray() 的 java 文档 返回一个包含此集合中所有元素的数组。

和 toArray(Object obj[])。 返回一个包含此集合中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。

第一个 toArray() 我明白,第二个 toArray(Object obj[]) 我不明白。请举例说明。

【问题讨论】:

标签: java arrays


【解决方案1】:

一个是通用的,另一个不是。 toArray() 将返回 Object[],而 toArray(T[]) 将返回 T[] 类型的数组。

示例:

public static void main(String[] args) {
    Object[] baseArray = new ArrayList<String>().toArray();
    System.out.println(baseArray.getClass().getCanonicalName());

    String[] improvArray = new ArrayList<String>().toArray(new String[5]);
    System.out.println(improvArray.getClass().getCanonicalName());
}

输出:

java.lang.Object[]
java.lang.String[]

【讨论】:

  • 谢谢Jeroen,你能举例解释一下吗?
  • 我用一个例子编辑了我的帖子。通过使用带有泛型参数的重载版本,您可以指定结果数组的类型。这将允许您使用特定类型而不是 Object
【解决方案2】:

首先,第二种方法是toArray(T[] a),而不是toArray(Object[] a)。第一个函数头中的T 称为类型参数,这意味着它所指的实际类会根据您调用方法的方式而变化。类型参数可以被toArray方法使用T类型做事,而不知道T到底是什么。

在本例中,T 将是 String

x.toArray(new String[0])

在本例中,T 将是 Integer

x.toArray(new Integer[0])

在本例中,T 将是 MyClass

x.toArray(new MyClass[0])

toArray(T[] a) 方法使用提供的类型信息返回给定类型的数组。例如,第一个示例将返回一个String 类型的数组,而第二个示例将返回一个Integer 类型的数组。

因此,调用 toArray() 会产生与调用 toArray(new Object[0]) 相同的结果(Object 数组)。

有关泛型的更多信息,您可以查看this tutorial

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-06
    • 1970-01-01
    • 2014-09-09
    • 2014-09-03
    • 2023-03-11
    • 2010-11-28
    相关资源
    最近更新 更多