我定义了List<Integer> stack = new ArrayList<Integer>();
当我尝试按以下方式将其转换为数组时:
Integer[] array= stack.toArray();
我得到了这个例外:
Exception in thread "main" java.lang.Error: Unresolved compilation problem:
Type mismatch: cannot convert from Object[] to Integer[].
为什么呢?它与Integer完全相同 - Integer。当类为father-and-son relation
时,它与通用情况不同我试图进行投射:
Integer[] array= (Integer[]) stack.toArray();
但是我在这里得到了这个错误:
Exception in thread "main" java.lang.ClassCastException: [Ljava.lang.Object; cannot be cast to [Ljava.lang.Integer;
有什么问题?
答案 0 :(得分:12)
由于类型擦除,ArrayList在运行时不知道它的泛型类型,因此它只能为您提供最通用的Object []。您需要使用the other toArray method,它允许您指定所需的数组类型。
Integer[] array= stack.toArray(new Integer[stack.size()]);
答案 1 :(得分:2)
这样做的方法是:
Integer[] array = stack.toArray(new Integer[stack.size()]);
对于记录,您的代码无法编译的原因不是只是类型擦除。问题是List<T>.toArray()
会返回Object[]
,并且在引入泛型之前就已经这样做了。
答案 2 :(得分:1)
请改为:
Integer[] array = stack.toArray(new Integer[stack.size()]);
我们需要将“seed”数组作为参数传递给toArray
方法。