java - 为什么不能将 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
我们不能用接口和实现类进行向下转换吗?如果可以那怎么办?
解决方案
如果实际引用的对象是 type ,则只能Foo
从to向下转换。如果对象是类型,你会得到一个.SubFoo
SubFoo
OtherSubFoo
ClassCastException
这就是这里的情况。有一个名为 的类(应该是私有的)java.util.Arrays.ArrayList
,它不同于java.util.ArrayList
. 该对象是 type java.util.Arrays.ArrayList
,因此不能强制转换为java.util.ArrayList
。例如,如果它是一个LinkedList
.
推荐阅读
- regex - 正则表达式匹配 Perl 中多行字符串中的一行
- html - Artillery 是否支持 GET 和 POST 以外的 html 方法?
- python - 如何找到两个向量之间的角度,范围从 0 rad 到 2 rad,而不是使用 arccos 函数的内角
- python - Python Dataframe 使用线性关系过滤数据
- machine-learning - pytorch torchvision.datasets.ImageFolder FileNotFoundError:找不到类 .ipynb_checkpoints 的有效文件
- html - Oracle Apex HTML CSS 在两个子区域之间插入垂直线
- database - 在 Oracle SQL developer 18.x 中配置 GIT
- rust - 如何编写只能与某种类型的迭代器一起使用的迭代器扩展?
- python-3.x - Python3 - 无法根据来自对象检测过程的输入正确启动输出设备
- java - 仅当在 Scala 中使用不相关的对象时才同步块