有谁知道为什么Java 1.6有这种行为:
List<String> list = ArrayList<String>();
String[] arr = (String[]) list.toArray();
Run Code Online (Sandbox Code Playgroud)
我得到一个ClassCastException,因为它返回Object []而不是String [].
我以为
List<T>.toArray()应该返回T [] - 不是吗?有没有人能够回答为什么语言中存在这种不便?还有如何解决这个问题?如何在List<String>不通过项目循环的情况下获取String [] ?
Mik*_*uel 21
您需要传入一个数组,以便其运行时类型可以用作提示toArray.试试吧toArray(new String[0]).您还可以传入预先调整大小的数组.
要理解,请考虑要进行哪种类型的擦除
new T[4]
Run Code Online (Sandbox Code Playgroud)
工作.如果Java允许的话,那么擦除后最好的就是
new Object[4]
Run Code Online (Sandbox Code Playgroud)
在给定作为a传递的类型提示的toArray情况下java.lang.reflect.Array,大多数实现用于构造正确类型的输出数组Class.
Dan*_*den 13
因为数组从一开始就使用Java,而泛型仅在Java 5中引入.并且该List.toArray()方法在Java 1.2中引入,在泛型存在之前,因此它被指定返回Object[].现在有很多现有代码需要List.toArray()返回Object[],因此现在无法更改.
此外,泛型在运行时被擦除,因此ArrayList如果需要,甚至无法构造适当类型的数组.
这个漏洞就是这个List.toArray(T[])方法,它会返回一个正确类型的数组,前提是你给它一个正确类型的数组,这样它就知道要使用什么类型.
| 归档时间: |
|
| 查看次数: |
11625 次 |
| 最近记录: |