topCoder
topCoder

Reputation: 95

java.lang.Object; cannot be cast to [Ljava.lang.Integer;at com.java.Test.Test.main(Test.java:16)

public class Test {

    public static void main(String[] args) {
        System.out.println(new CountingGenerator.String(12).next());
        List<Integer> list=new ArrayList<Integer>();
        list.add(new Integer(1));
        list.add(new Integer(2));

        Integer[] c = {1,3,3};
        //throw an exception:
        c = (Integer[]) list.toArray();
    }
}

I wonder why this happened ? Integer is a subclass of Object,so it should be Ok instead! please answer me deeply! I want know why? what's the principle ?

Upvotes: 2

Views: 1096

Answers (1)

singhakash
singhakash

Reputation: 7919

Change the line

 c=(Integer[]) list.toArray();

to

c= list.toArray(c); // add c as parameter

In your list.toArray(); returns Object[] and JVM doesn't know how to blindly downcast Object[] to Integer[].

public Object[] toArray()      //return Object type array
public <T> T[] 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

Java Docs

Upvotes: 4

Related Questions