Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/385.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:将数组转换为列表异常_Java_Exception_Collections_Classcastexception - Fatal编程技术网

Java:将数组转换为列表异常

Java:将数组转换为列表异常,java,exception,collections,classcastexception,Java,Exception,Collections,Classcastexception,数组类包含一个将数组转换为列表的函数。当我将整数的数组转换为数组列表时,它将引发异常 Integer[] array = new Integer[]{2, 4, 3 , 9}; ArrayList<Integer> test = (ArrayList<Integer>) Arrays.asList(array); ArrayList实现了List接口,那么为什么会抛出异常呢 当我尝试使用Listreference变量直接捕获对象时,效果很好 Arrays.asList返

数组
类包含一个将数组转换为列表的函数。当我将
整数
的数组转换为
数组列表
时,它将引发异常

Integer[] array = new Integer[]{2, 4, 3 , 9};
ArrayList<Integer> test = (ArrayList<Integer>) Arrays.asList(array);
ArrayList
实现了
List
接口,那么为什么会抛出异常呢


当我尝试使用
List
reference变量直接捕获对象时,效果很好

Arrays.asList
返回对
List
的自定义解释,它不是
java.util.ArrayList
,而是固定大小的
抽象列表

您需要将所有内容包装到新列表中:

List<Integer> newList = new ArrayList<>(Arrays.asList(array));
List newList=newarraylist(Arrays.asList(array));
不返回
数组列表,它返回一个。您对
列表
的实现一无所知,只知道它遵守
列表
契约,并有文档化的限制(列表
的大小是固定的,因此可能不会实现这样的可选操作,从而改变其大小).asList
方法返回一个
列表
,而不是
数组列表
。您不能假设实现将返回
列表的
ArrayList
实现-这就是为什么会出现异常


该错误指示实现返回
数组中定义的内部类的实例;内部类也被称为
ArrayList
,但它与
java.utils
中定义的
ArrayList
无关。在两者之间进行简单的强制转换将不起作用-如果必须拥有
java.util.ArrayList
,则需要从
asList
方法返回的
列表中自己创建它。

您可以使用
列表作为参数初始化新的
ArrayList

Integer[] ints = new Integer[]{2,4,3,9};
List<Integer> temp = Arrays.asList( ints );
ArrayList<Integer> testList = new ArrayList<Integer>(temp);
Integer[]ints=新整数[]{2,4,3,9};
List temp=Arrays.asList(ints);
ArrayList testList=新的ArrayList(临时);

“…但是一个不能修改的
抽象列表”
。”javadoc中没有任何东西说它是
抽象列表。你所知道的是它是一个
列表
@T.J.Crowder我将基于类的源代码:Java8:source说它返回一个内部私有ArrayList类的实例,该类扩展了AbstractList。。私有静态类ArrayList扩展了AbstractListimplements@MarcoAcierno&Rogue:消息来源说什么并不重要,重要的是合同上说了什么。契约是声明和文档,而不是特定实现的源。尽管文档可能会声明它不是返回的可修改集合。如果您试图对其进行操作,将引发运行时异常。
Integer[] ints = new Integer[]{2,4,3,9};
List<Integer> temp = Arrays.asList( ints );
ArrayList<Integer> testList = new ArrayList<Integer>(temp);