String[] a = c.toArray(new String[0]);
第一:我需要在这里进行类型转换吗?(我认为我们应该像不使用类型转换(String[])c.toArray();
那样编写,但我已经看到了c.toArray()
。这是否有效?
第二:还有我们为什么写new String[0]
?
通常仅在使用泛型Java时才需要类型转换。如果您查看文档,Collection.toArray(T[])
将会发现它知道返回的数组的类型与传入的数组的类型相同。因此,您可以编写:
List<String> list = new ArrayList<String>();
list.add("Foo");
String[] array = list.toArray(new String[0]);
您传入数组以告诉集合所需的结果类型,该结果类型可能与集合中的类型不同。例如,如果您有一个a,则List<OutputStream>
可能要将其转换为an Object[]
,a Stream[]
或ByteArrayOutputStream[]
a-显然,只有在每个元素实际上都是 a时,后者才起作用ByteArrayOutputStream
。这也意味着,如果您已经具有正确类型和大小的数组,则可以将内容复制到该数组中,而不必创建新的数组。
顺便说一句,这个答案的先前版本是不准确的-如果您使用不带任何参数的重载,则总是会得到一个不能转换的重载Object[]
:
List<String> list = new ArrayList<String>();
list.add("Foo");
// toArray doesn't know the type of array to create
// due to type erasure
Object[] array = list.toArray();
// This cast will fail at execution time
String[] stringArray = (String[]) arrray;
编辑:我刚刚注意到erdemoo的答案中也提到了这一点,但是也可以在这里找到它:)
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句