2017-04-12 85 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

相关问题