2012-06-13 28 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)

相關問題