2012-06-13 26 views
3

可能重复:
why does List<String>.toArray() return Object[] and not String[]? how to work around this?为什么List.toArray()返回一个Object数组?

参见该代码例如:

List<String> list = new ArrayList<String>(); 
    list.add("hello"); 
    list.add("world"); 
    Object [] array = list.toArray(); 

为什么该方法toArray()返回的Object数组?其他List方法如get(),remove()能够返回列表中的对象的类型。

+1

@SuperChafouin请发布提问之前做一些研究。 –

+1

好的,这回答我的问题:[http://stackoverflow.com/a/7909755/1075341](http://stackoverflow.com/a/7909755/1075341) 我标记我的问题重复。 –

+0

对于那些对这个问题感兴趣的人,我发现最好的理解方式是尝试使用泛型来编写自己的'toArray'实现,或者查看'ArrayList'代码。 –

回答

0

我相信是返回对象为了通用很可能它必须处理内存分配问题。系统不必知道你的确切类型以便分配一个对象数组。因为它只返回一个项目,所以您不会在get和remove中遇到此问题。

但我会upvote你的问题,希望有人可以确认我的答案或纠正我。

0

Java List#toArray解释它。

+0

您的链接无效 –

+0

答案被意外格式化为代码固定! – Wingman4l7

+3

从现在开始,请参阅有效的文档。该链接指向Java 1.4,[Java 6](http://docs.oracle.com/javase/6/docs/api/java/util/List.html#toArray())和[ Java 7](http://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#toArray())。 –

1

你可以使用toArray(String[] a)这将返回字符串类型的数组或基本上指定类型的数组。 toArray方法返回对象,因为它充当基于Collection和基于List的API之间的桥梁。

0

toArray()必须构造新的数组对象并填充它。但由于运行时通用类型擦除toArray()不知道什么是元素的实际类型。因为这会创建一个Object数组(Object[])。如果您想要输入数组,请使用<T> T[] toArray(T[] a)

3
Because array has been in Java since the beginning, while generics 
were only introduced in Java 5. And the List.toArray() method was 
introduced in Java 1.2, before generics existed, so it was 
specified to return Object[]. 

u可以使用toArray(T[] a)只是来看看Collection.toArray(T[] a)

相关问题