根据java doc for toArray() 返回一个包含此集合中所有元素的数组。
和toArray(Object obj [])。 返回包含此collection中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型。
首先toArray()我理解但是第二个toArray(Object obj [])我无法理解。请以示例解释。
答案 0 :(得分:5)
一个是通用的,另一个不是。 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[]
答案 1 :(得分:1)
首先,第二种方法是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()
的调用会产生相同的结果(Object
数组)作为对toArray(new Object[0])
的调用。
有关泛型的更多信息,您可以查看this tutorial。