水木竹水Bob 2015-12-18 14:27 采纳率: 0%
浏览 2253

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条回答 默认 最新

  • 奔腾的野马 2015-12-18 14:50
    关注

    我觉得问题可能出现在 Enum[] en=Util.parse("SurCode", element, SurCode.A);这个方法返回类型究竟是不是 SurCode类型,你可以试试用 instanceof判断一下en是不是 SurCode类型,打印出来看一看。

    评论

报告相同问题?

悬赏问题

  • ¥50 易语言把MYSQL数据库中的数据添加至组合框
  • ¥20 求数据集和代码#有偿答复
  • ¥15 关于下拉菜单选项关联的问题
  • ¥20 java-OJ-健康体检
  • ¥15 rs485的上拉下拉,不会对a-b<-200mv有影响吗,就是接受时,对判断逻辑0有影响吗
  • ¥15 使用phpstudy在云服务器上搭建个人网站
  • ¥15 应该如何判断含间隙的曲柄摇杆机构,轴与轴承是否发生了碰撞?
  • ¥15 vue3+express部署到nginx
  • ¥20 搭建pt1000三线制高精度测温电路
  • ¥15 使用Jdk8自带的算法,和Jdk11自带的加密结果会一样吗,不一样的话有什么解决方案,Jdk不能升级的情况