Java ArrayStoreException:在通用ArrayList中
来自ArrayStoreException的Java文档 抛出以指示已尝试存储错误的 将对象类型转换为对象数组 为了避免此异常,我使用了泛型。但当我运行以下测试程序时:Java ArrayStoreException:在通用ArrayList中,java,generics,Java,Generics,来自ArrayStoreException的Java文档 抛出以指示已尝试存储错误的 将对象类型转换为对象数组 为了避免此异常,我使用了泛型。但当我运行以下测试程序时: public class Test { public static void main(String[] args) { Collection<Number> nums = new ArrayList<Number>(); nums.add(new Integer(
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);
}
}
}
有人能帮我理解为什么即使我的列表是泛型类型,也会引发此异常。您的
ArrayList
包含一个长的。Long
不能存储在Integer
数组中,因为Integer
不是Long
的超级类型
以下工作将起作用:
Number[] ints = nums.toArray(new Number[nums.size()]);
for (Number integer : ints) {
System.out.println(integer);
}
这在toArray
的Javadoc中有明确说明:
抛出:
ArrayStoreException-如果指定数组的运行时类型不是此集合中每个元素的运行时类型的超类型
您的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-如果指定数组的运行时类型不是此集合中每个元素的运行时类型的超类型
方法toArray
接受整数数组,但nums
包含长字符。Long不能强制转换为IntegerMethodtoArray
接受整数数组,但nums
包含Long。Long不能转换为整数