为什么List <T> .toArray()返回通用Object []而不是T []?

nag*_*lzs 0 java generics collections

例如:

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

我知道这是它的方式,它不能改变.当然我可以将它转换为String [],但我想知道它背后的想法是什么?这是Java中的"bug",还是有充分的理由呢?

Sur*_*tta 5

灵活性.

toArray()返回没有传递任何参数的方法Object[].

有一个很好的理由,现在你知道你期望哪种类型,并且该方法的作者不知道由于类型擦除而在运行时返回哪种类型的数组.所以他们只是让它成为所有对象的超级类型,这Object就是它返回的原因Object[]

如果你想指定你的类型,它们是好的并返回你的特定类型:)

String[] aItems= items.toArray(new String[0]);
Run Code Online (Sandbox Code Playgroud)