繁体   English   中英

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

[英]Java: Convert Arrays To List Exception

Arrays类包含一个将数组转换为list的函数。当我将Integer数组转换为ArrayList ,它将引发异常。

Integer[] array = new Integer[]{2, 4, 3 , 9};
ArrayList<Integer> test = (ArrayList<Integer>) Arrays.asList(array);

Arrays.asList(array)返回一个Integer类型的List ,当我将Integer列表转换为ArrayList ,它会抛出一个异常

 java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

ArrayList实现了List接口,为什么会抛出异常呢?

当我尝试使用List引用变量直接捕获对象时,这工作正常。

Arrays.asList返回List定义解释,它不是java.util.ArrayList ,而是一个固定大小的AbstractList

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

List<Integer> newList = new ArrayList<>(Arrays.asList(array));

Arrays#asList不返回ArrayList<T> ,它返回List<T> 你对List的实现一无所知,只是因为它遵守了List合同,并且有记录的限制( List是固定大小的,因此可能没有实现像List#add这样的可选操作会改变它的大小)。

static <T> Array.asList方法返回List<T> ,而不是ArrayList<T> 您不能假设实现将返回List<T>ArrayList<T>实现 - 这就是您获得异常的原因。

该错误表明该实现返回了Arrays类中定义的内部类的实例; 内部类也称为ArrayList ,但它与java.utils定义的ArrayList<T>无关。 两者之间的简单转换不起作用 - 如果必须有java.util.ArrayList<T> ,则需要自己从asList方法返回的List<T>创建它。

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM