在 Java 泛型之前,Collection.toArray()
无法知道开发人员期望的数组类型(特别是对于空集合)。据我了解,这是成语 collection.toArray(new E[0])
背后的主要理由。 .
对于泛型,Collection<E>.toArray()
只能返回一个包含 E
实例的数组和/或其专长。我想知道为什么返回类型仍然是 Object[]
而不是 E[]
.在我看来,返回 E[]
而不是 Object[]
不应破坏现有代码。
见: Collection.toArray()
, Collection.toArray(T[])
和相关主题java: (String[])List.toArray() gives ClassCastException
最佳答案
这是一个很好的问题。答案是泛型也称为“删除”。它不仅仅是一个名字。泛型编码的信息仅在编译时使用,然后被删除。所以,JVM 甚至不知道这个泛型 E
,因此无法创建数组 E[]
.
其他方法toArray(T[] a)
在运行时从参数接收有关类型的信息。这就是这个方法的原型(prototype)是 <T> T[] toArray(T[] a)
的原因。 :它获取类型为 T 的数组,并且可以返回类型为 T 的数组。类型作为参数传递。
关于java - 为什么 Java 的 Collection<E>.toArray() 返回 Object[] 而不是 E[]?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6173495/