【发布时间】:2021-01-28 08:38:32
【问题描述】:
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);
错误:
线程“main”java.lang.ClassCastException 中的异常:java.util.Arrays$ArrayList 无法转换为 java.util.ArrayList
我们不能用接口和实现类进行向下转换吗?如果可以那怎么办?
【问题讨论】:
-
向下转换并不总是成功,你知道的。
-
我认为这是一个值得更多考虑的有趣问题。答案stackoverflow.com/a/64344883/348975 提出了一个明显的问题,为什么 java 实现者要创建两个 ArrayList 实现。 java.util.Arrays.ArrayList(私有)和 java.util.ArrayList。如果不阅读代码,我觉得这很愚蠢。
-
@emory,这应该是一个单独的问题。重复发布的问题非常直接地回答了。
-
然而,一般来说你不应该沮丧。这是一种不好的编码习惯,应该避免。
标签: java arraylist collections interface downcast