java - 为什么 List<String>.toArray() 返回 Object[] 而不是 String[]?如何解决这个问题?

标签 java generics

有人知道为什么 Java 1.6 有这种行为吗:

List<String> list = ArrayList<String>();
String[] arr = (String[]) list.toArray();

我得到一个 ClassCastException,因为它返回 Object[] 而不是 String[]。

我以为 List<T>.toArray()应该返回 T[] - 不?有谁知道为什么语言中存在这种不便? 以及如何解决这个问题?如何从 List<String> 获取 String[]不循环遍历项目?

最佳答案

您需要传入一个数组,以便其运行时类型可以被 toArray 用作提示。尝试使用 toArray(new String[0]) 代替。您还可以传入预先确定大小的数组。

要理解,请考虑需要执行什么类型的删除

new T[4]

工作。如果 Java 允许这样做,那么它在删除后所能做的最好的事情就是

new Object[4]

大多数toArray实现使用java.lang.reflect.Array给定作为 Class 传递的类型提示,构造正确类型的输出数组。

关于java - 为什么 List<String>.toArray() 返回 Object[] 而不是 String[]?如何解决这个问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48023859/

相关文章:

java - 将 Java DOM 文档序列化为 XML : Add CData Elements

generics - 泛型结构的构造函数中出现 "Expected type parameter"错误

java - 链接方法时不能依赖目标类型

java - XML 数据类型规范

C#类声明中泛型参数的重复

swift - 类型开关模式

用于在方法调用中显式指定泛型参数的 Java 语法

java - 当我从命令行输入 "mvn install"时,如何将 Maven Web 应用程序配置为在 glassfish 上自动部署?

java - 如何检索 eclipse.ini 文件中设置的堆大小?

java - 使用 jclouds API 仅更新 SoftLayer 中对象的元数据