开发者社区> 问答> 正文

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

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

展开
收起
蛮大人123 2016-03-25 14:33:19 2863 0
1 条回答
写回答
取消 提交回答
  • 我说我不帅他们就打我,还说我虚伪

    java不支持数组类型的协变/逆变。也就是说SurCode派生自Object但是SurCode[]Object[]没有继承关系。

    2019-07-17 19:14:19
    赞同 展开评论 打赏
问答分类:
问答标签:
问答地址:
问答排行榜
最热
最新

相关电子书

更多
Spring Cloud Alibaba - 重新定义 Java Cloud-Native 立即下载
The Reactive Cloud Native Arch 立即下载
JAVA开发手册1.5.0 立即下载