String[] a = c.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)
第一:我需要在这里打字吗?(我想我们应该这样写,(String[])c.toArray();
但我已经看到它只是c.toArray()
没有使用类型转换.这有效吗?
第二:我们为什么写new String[0]
?
Jon*_*eet 12
通常只有在使用pre-generics Java时才需要类型转换.如果您查看文档,Collection.toArray(T[])
您将看到它知道返回的数组类型与传入的数组类型相同.因此,您可以编写:
List<String> list = new ArrayList<String>();
list.add("Foo");
String[] array = list.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)
您传入数组以告诉集合您想要的结果类型,这可能与集合中的类型不同.例如,如果你有一个List<OutputStream>
你可能想要将它转换为a Object[]
,a Stream[]
或a 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;
Run Code Online (Sandbox Code Playgroud)
编辑:我刚刚注意到这也是在erdemoo的答案中提到的,但是在这里也可以没有受到伤害:)
归档时间: |
|
查看次数: |
6845 次 |
最近记录: |