Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java ArrayStoreException:在通用ArrayList中_Java_Generics - Fatal编程技术网

Java ArrayStoreException:在通用ArrayList中

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(

来自ArrayStoreException的Java文档

抛出以指示已尝试存储错误的 将对象类型转换为对象数组

为了避免此异常,我使用了泛型。但当我运行以下测试程序时:

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不能强制转换为IntegerMethod
toArray
接受整数数组,但
nums
包含Long。Long不能转换为整数