来自ArrayStoreException的Java
引发,以指示已尝试将错误类型的对象存储到对象数组中。
为了避免这个异常,我在运行以下测试程序时使用了generics.But:
public class Test {
public static void main(String[] args) {
Collection<Number> nums = new ArrayList<Number>();
nums.add(new Integer(1));
nums.add(new Long(-1));
Integer[] ints = nums.toArray(new Integer[nums.size()]);
for (Integer integer : ints) {
System.out.println(integer);
}
}
}我得到的ArrayStoreException如下-这是我没有想到的。
Exception in thread "main" java.lang.ArrayStoreException
at java.lang.System.arraycopy(Native Method)
at java.util.ArrayList.toArray(ArrayList.java:408)有人能帮我理解为什么即使我的列表是泛型类型也会抛出这个异常吗?
发布于 2017-06-07 05:55:20
您的ArrayList包含一个Long。Long不能存储在Integer数组中,因为Integer不是Long的超级类型。
下列措施将起作用:
Number[] ints = nums.toArray(new Number[nums.size()]);
for (Number integer : ints) {
System.out.println(integer);
}这一点在toArray的Javadoc中有明确的说明。
抛出: ArrayStoreException -如果指定数组的运行时类型不是此集合中每个元素的运行时类型的超级类型
https://stackoverflow.com/questions/44404531
复制相似问题