2017-04-12 84 views
0

例如:爲什麼List <T> .toArray()返回的是通用Object []而不是T []?

List<String> items = new ArrayList<String>(); 
String[] aItems = items.toArray(); // type error, because toArray() returns Object[] 

我明白,這是事情是這樣的,它不能改變。當然我可以將它轉換爲String [],但我不知道它背後的想法是什麼?這是Java中的一個「bug」嗎,還是有很好的理由?

回答

5

靈活性。

不傳遞任何參數的toArray()方法返回Object[]

有一個很好的理由,現在你知道你期望哪種類型,並且由於類型擦除,方法的作者不知道在運行時返回哪種類型的數組。因此,他們只是讓它成爲超級類型,是Object的所有對象的,這就是爲什麼它如果要指定類型返回Object[]

,他們是很好的,回到你的具體類型:)

String[] aItems= items.toArray(new String[0]); 
+1

更好地使用'items.toArray(new String [items.size()])'來防止分配額外的數組對象。如果數組大小等於'List'大小,那麼'items'元素將被複制到給定的數組,而方法將返回該數組,而不是新創建的數組。 – Lennier

+0

我還是不明白爲什麼不能列表().toArray()return T []?我不明白如何能夠返回其他任何東西。 – nagylzs

+0

哦,我現在看到。你不能這樣宣佈。那麼,我不認爲這是一個很好的理由。我把它看作語言障礙。 – nagylzs

相關問題