ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.xxx.xxx

备注:

前端时间在做java的时候,需要将前端js的数据传递并填充到JavaBean中,

JavaBean中用List进行接收,如下:

List<BeanName> list;

public List<BeanName> getList()...

public List<BeanName> setList(..)...

然后在方法调用的时候

1、List<BeanName> userList = user.getList();

2、for(BeanName bean : userList){

.......

    }

在执行到第二行的时候报错,错误提示

ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.xxx.BeanName 

当时感觉非常的神奇,用List<BeanName> userList 都可以存 user.getList();

为啥循环就无法转换类型呢?

查看了下相应的文档才发现原来Java中的泛型只是在编译期有限制类型的作用,在运行期是不起到限制作用的。

可以用下面的代码做模拟测试:

//模拟运行期,会将泛型限制忽略
        List listObj = new ArrayList();
        listObj.add(new Object());
        
        //模拟编译期,加入泛型限制
        List<String> listStr = new ArrayList<String>();
        listStr.add("test");
        
        //1、可以看到[运行期]的任何类型的数据最后是可以添加到泛型集合中的,因为在运行期没有泛型的限制和存在
        //2、虽然过了代码编译这一关,没错误提示,但是在下面循环运行的时候,就会报错了,
        listStr.addAll(listObj);
        
        //循环List测试
        for (String str : listStr) {
            System.out.println(str);
        }

Exception in thread "main" java.lang.ClassCastException: java.lang.Object cannot be cast to java.lang.String
at com.rule.Test.main(Test.java:35)


可以看到在循环的时候提示无法转换,这就是为什么 ,“明明数据可以存储,但是却无法遍历循环的原因!”。

总结:

而出现 ClassCastException: net.sf.ezmorph.bean.MorphDynaBean cannot be cast to com.xxx.xxx

这种错误的大部分原因就是因为不同语言之间数据传递,进行数据封装和解析的时候出现,因为在不同语言之间数据传递 ,数据的格式不好控制,在编译期

错误没有体现出来,只有在运行期间才会报错出来。

如果都是在同一个语言平台上,比如java中 进行数据转换,泛型发现类型不对,编译器就会马上提示错误,红叉,编译不通过。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

beyondwild

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值