Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;

来源:互联网 发布:西语翻译软件 编辑:程序博客网 时间:2024/06/10 23:35
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 ?



回答:

up vote3down voteunaccept

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 arraypublic <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

shareedit
you can't treat a list of Integer IS-A list of Object!

0 0
原创粉丝点击