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

}

I try cast in this line Class[] classes=(Class[])map.values().toArray(); but get exception.

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

What is problem?

1
  • Also, what's up with the "[L...;" notation for class names? Commented Jun 4, 2014 at 11:47

4 Answers 4

37

Change:

Class[] classes = (Class[]) map.values().toArray();

To:

Class[] classes = map.values().toArray(new Class[0]);

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):

Returns an array containing all of the elements in this collection; the runtime type of the returned array is that of the specified array. ...
Note that toArray(new Object[0]) is identical in function to toArray().

Sign up to request clarification or add additional context in comments.

Comments

4

toArray() returns an Object[] [and not any object derived from Object[]]. Each element in this array is of type Class, but the array itself is not of type Class[]

You should cast each element in the array to Class instead of trying to cast the array, or use Collection.toArray(T[]) to avoid casting.

Comments

1

Use T[] toArray(T[] a) from Collection instead.

Comments

0

Use this code for listing out the values of map i.e. class names:

Object[] array = map.values().toArray();
for (Object object : array) {
    System.out.println(object.toString());
}

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.