有人知道为什么 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/