Java 为什么列表<;T>;。toArray()返回泛型对象[]而不是T[]?

Java 为什么列表<;T>;。toArray()返回泛型对象[]而不是T[]?,java,generics,collections,Java,Generics,Collections,例如: List<String> items = new ArrayList<String>(); String[] aItems = items.toArray(); // type error, because toArray() returns Object[] List items=new ArrayList(); 字符串[]aItems=items.toArray();//类型错误,因为toArray()返回对象[] 我明白这就是现状,不能改变。当然,我可以

例如:

List<String> items = new ArrayList<String>();
String[] aItems = items.toArray(); // type error, because toArray() returns Object[]
List items=new ArrayList();
字符串[]aItems=items.toArray();//类型错误,因为toArray()返回对象[]
我明白这就是现状,不能改变。当然,我可以将它转换为字符串[],但我想知道它背后的想法是什么?这是Java中的一个“bug”,还是有很好的理由?

灵活性

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

有一个很好的理由是,现在您知道了所需的类型,并且由于类型擦除,方法的作者不知道在运行时返回哪种类型的数组。因此,他们只是让它成为所有对象的超级类型,即
object
,这就是为什么它返回
object[]

如果要指定类型,则它们很好,并返回您的特定类型:)

灵活性

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

有一个很好的理由是,现在您知道了所需的类型,并且由于类型擦除,方法的作者不知道在运行时返回哪种类型的数组。因此,他们只是让它成为所有对象的超级类型,即
object
,这就是为什么它返回
object[]

如果要指定类型,则它们很好,并返回您的特定类型:)


最好使用
items.toArray(新字符串[items.size()])
来防止分配额外的数组对象。如果数组大小等于
List
size,那么
items
元素将被复制到给定的数组中,并且方法返回该数组,而不是新创建的数组。我仍然不明白为什么不能List()。toArray()返回t[]?我看不出还有什么可以退的。哦,我明白了。你不能那样声明。我不认为这是个好理由。我认为这是一个语言障碍。最好使用
items.toArray(新字符串[items.size()])
来防止分配额外的数组对象。如果数组大小等于
List
size,那么
items
元素将被复制到给定的数组中,并且方法返回该数组,而不是新创建的数组。我仍然不明白为什么不能List()。toArray()返回t[]?我看不出还有什么可以退的。哦,我明白了。你不能那样声明。我不认为这是个好理由。我认为这是一种语言障碍。
String[] aItems= items.toArray(new String[0]);