首页 > 解决方案 > 为什么不能将 Arrays.asList() 的结果转换为 ArrayList?

问题描述

Arrays.asList 的返回类型是 List 并将其转换为 ArrayList 会引发错误。ArrayList 是 List 的子实现类。所以,将 List 转换为 ArrayList 将是向下转换的。那么为什么第一行以下会引发运行时错误。

ArrayList<String> list  = (ArrayList<String>) Arrays.asList("Amit","Suneet","Puneet");// Run time Error
List<String> list2 = new ArrayList<>(list);

错误:

线程“主”java.lang.ClassCastException 中的异常:java.util.Arrays$ArrayList 无法转换为 java.util.ArrayList

我们不能用接口和实现类进行向下转换吗?如果可以那怎么办?

标签: javaarraylistcollectionsinterfacedowncast

解决方案


如果实际引用的对象是 type ,则只能Foo从to向下转换。如果对象是类型,你会得到一个.SubFooSubFooOtherSubFooClassCastException

这就是这里的情况。有一个名为 的类(应该是私有的)java.util.Arrays.ArrayList,它不同于java.util.ArrayList. 该对象是 type java.util.Arrays.ArrayList,因此不能强制转换为java.util.ArrayList。例如,如果它是一个LinkedList.


推荐阅读