有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java为什么不能强制转换数组的结果。asList()到ArrayList?

返回数组的类型。asList是List,将其强制转换为ArrayList会引发错误。ArrayList是List的子实现类。所以,ArrayList的演员名单将被降级。那么为什么在第1行下面会抛出运行时错误呢

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

错误:

Exception in thread "main" java.lang.ClassCastException: java.util.Arrays$ArrayList cannot be cast to java.util.ArrayList

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


共 (1) 个答案

  1. # 1 楼答案

    如果实际引用的对象是SubFoo类型,则只能Foo向下转换到SubFoo。如果对象的类型为OtherSubFoo,则会得到一个ClassCastException

    这就是这里的情况。有一个名为java.util.Arrays.ArrayList的类(应该是私有的),它不同于java.util.ArrayList。对象的类型为java.util.Arrays.ArrayList,因此无法将其强制转换为java.util.ArrayList。例如,如果它是一个^{,同样的事情也会发生