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);