请问为什么Object类型数组转型为泛型数组运行会报错?
例如:
Object[] o = new String("str","333");
String[] str = (String[])o;
System.out.println(str);//此处运行不报错
Object[] os = new Object[]{new ArrayList<People>(),new ArrayList<People>()};
ArrayList<People>[] als = (ArrayList<People>[])os;
System.out.println(als[0].get(0).getName());//此处运行出错错误提示:[Ljava.lang.Object; cannot be cast to [Ljava.util.ArrayList;
为什么不能将Object强制转型为ArrayList呢转型Java
例如:
Object[] o = new String("str","333");
String[] str = (String[])o;
System.out.println(str);//此处运行不报错
Object[] os = new Object[]{new ArrayList<People>(),new ArrayList<People>()};
ArrayList<People>[] als = (ArrayList<People>[])os;
System.out.println(als[0].get(0).getName());//此处运行出错错误提示:[Ljava.lang.Object; cannot be cast to [Ljava.util.ArrayList;
为什么不能将Object强制转型为ArrayList呢转型Java
ArrayList<People>[] als = (ArrayList<People>[])os;
这两个地方的类型要一致吧
Parent[] p = new Parent[]{new ChildA(), new ChildB()};这样定义是可以的,因为p里包含了ChildA/ChildB两个子类对象,如果把p转成子类数组是无法定义类型的。
所以不能把数组转成子类,只能把某个元素转成子类。你的代码需要这样写:
((ArrayList<People>)os[0]).get(0).getName()