Collection.toArray()java.lang.ClassCastException [英] Collection.toArray() java.lang.ClassCastException
问题描述
import java.util.HashMap;
import java.util.Map;
public class Main
{
public static void main(String[] args)
{
Map<Integer,Class> map=new HashMap<Integer,Class>();
map.put(0,Main.class);
Class[] classes=(Class[])map.values().toArray();
for (Class c:classes)
System.out.println(c.getName());
}
}
我尝试在此行中强制转换 Class [] classes =(Class [])map.values().toArray();
但得到异常.
I try cast in this line Class[] classes=(Class[])map.values().toArray();
but get exception.
线程主"中的异常java.lang.ClassCastException:[Ljava.lang.Object;无法转换为[Ljava.lang.Class;在Main.main(Main.java:11)
出什么问题了?
推荐答案
更改:
Class[] classes = (Class[]) map.values().toArray();
收件人:
Class[] classes = map.values().toArray(new Class[0]);
这提供了有关将 Collection
转换为哪种数组类型的信息.否则,它将返回类型为 Object
的数组(并且不能将其强制转换为 Class []
).
This gives information on which type of array to convert the Collection
to. Otherwise, it returns an array of type Object
(and that cannot be cast to an Class[]
).
Quoted from the API documentation for Collection.toArray(T[] a)
:
返回包含此集合中所有元素的数组;返回数组的运行时类型是指定数组的运行时类型....
请注意,toArray(new Object [0])
在功能上与toArray()
相同.
这篇关于Collection.toArray()java.lang.ClassCastException的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!