请问为什么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

解决方案 »

  1.   

    Object是一切类的父类,当然也包括String,但反过来肯定不行
      

  2.   

    Object[] os = new Object[]{new ArrayList<People>(),new ArrayList<People>()};
    ArrayList<People>[] als = (ArrayList<People>[])os;
    这两个地方的类型要一致吧
      

  3.   

    如果Foo是Bar的一个子类型(子类或者子接口),而G是某种泛型声明,那么G<Foo>是G<Bar>的子类型并不成立。
      

  4.   

    Object是所有类型的基类,对于父子类型转换,如果是单一实例,只要类型一致就可以转换,不会异常。对于数组是不行的,举个例子:
    Parent[] p = new Parent[]{new ChildA(), new ChildB()};这样定义是可以的,因为p里包含了ChildA/ChildB两个子类对象,如果把p转成子类数组是无法定义类型的。
    所以不能把数组转成子类,只能把某个元素转成子类。你的代码需要这样写:
    ((ArrayList<People>)os[0]).get(0).getName()