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 楼答案
如果实际引用的对象是
SubFoo
类型,则只能从Foo
向下转换到SubFoo
。如果对象的类型为OtherSubFoo
,则会得到一个ClassCastException
这就是这里的情况。有一个名为,同样的事情也会发生
java.util.Arrays.ArrayList
的类(应该是私有的),它不同于java.util.ArrayList
。对象的类型为java.util.Arrays.ArrayList
,因此无法将其强制转换为java.util.ArrayList
。例如,如果它是一个^{