String[] a = c.toArray(new String[0]);
首先:我需要在这里进行类型转换吗? (我认为我们应该这样写这有效吗?
第二:还有为什么要写new String[0]
?
最佳答案
通常只有在使用前泛型 Java 时才需要类型转换。如果您查看 Collection.toArray(T[])
的文档你会看到它知道返回的数组类型与传入的数组类型相同。所以,你可以这样写:
List<String> list = new ArrayList<String>();
list.add("Foo");
String[] array = list.toArray(new String[0]);
你传入数组告诉集合你想要什么结果类型,这可能和集合中的类型不一样。例如,如果您有一个 List<OutputStream>
你可能想把它转换成 Object[]
, 一个 Stream[]
或 ByteArrayOutputStream[]
- 显然后者只有在每个元素实际上是一个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 的回答中也提到了这一点,但在这里也没有坏处:)
关于java - 我们应该为 object.toArray() 使用类型转换吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1056683/