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中 进行数据转换,泛型发现类型不对,编译器就会马上提示错误,红叉,编译不通过。










评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值