Reputation: 95
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
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
Upvotes: 4