Collection.toArray()java.lang.ClassCastException

eXX*_*XX2 19 java collections

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());
    }

}
Run Code Online (Sandbox Code Playgroud)

我试着在这一行投,Class[] classes=(Class[])map.values().toArray();但得到例外.

Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Class; at Main.main(Main.java:11)

有什么问题?

dac*_*cwe 36

更改:

Class[] classes = (Class[]) map.values().toArray();
Run Code Online (Sandbox Code Playgroud)

至:

Class[] classes = map.values().toArray(new Class[0]);
Run Code Online (Sandbox Code Playgroud)

这提供了有关要转换为哪种类型数组的信息Collection.否则,它返回一个类型的数组Object(并且不能转换为a Class[]).


引用API文档Collection.toArray(T[] a):

返回包含此collection中所有元素的数组; 返回数组的运行时类型是指定数组的运行时类型....
注意toArray(new Object[0])功能相同toArray().