wangzhongbo_24
水木竹水Bob
2015-12-18 14:27

Java中数组的类型转换问题

  • java
  • 异常
  • 转型

向上转型自不用说,对向下转型原理也知道,主要看父类的引用:如果父类变量引用的是正确的子类类型(即父类对象引用的是子类型的内存空间,然后赋给子类对象),则赋值将执行;如果父类变量引用的不是相关的子类型,将产生ClassCastException异常。
通过下属代码测试,符合原理。

    Object[] o={"qw","we","rt"};
        Object[] oo=new String[]{"qw","we","rt"};
        String[] s=new String[3];
        s=(String[]) o;
        String[]ss=(String[]) oo;

但在实际运用时出现的情况令我不解,如:

     Enum[] en=Util.parse("SurCode", element, SurCode.A);//SurCode为枚举类型,该函数返回的数组引用该枚举类型,通过下边的代码可验证
     System.out.println( (en[0].getClass()));
        moreSurCode=new SurCode[en.length];
        for(int i=0;i<en.length;i++){
            moreSurCode[i]=(SurCode) en[i];//可以正常转换
        }
        SurCode[] moreSurCode1= (SurCode[]) en;//此句话就会报 java.lang.ClassCastException: [Ljava.lang.Enum; cannot be cast to SurCode

异常正如注解中所述,为什么会出现该问题,请各位赐教!

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

2条回答

为你推荐

换一换