[英]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.