大家好,本文主要讲java中java.lang.ClassCastException异常产生的原因及解决方法。有兴趣的同学过来看看,如果对你有帮助记得收藏。
我们通常在OOP设计中使用继承。
但是,继承对象之间的强制转换可能会遇到java.lang.ClassCastException异常
错误日志如下所示:
19:58:25.010[http-nio-8080-exec-5]错误o.a.c.c.C.[。[.[.路径为[]的上下文中的servlet [dispatcherServlet]的[dispatcher servlet]-servlet . service()引发异常[请求处理失败;嵌套异常是Java . lang . classcastexception:class com . ossez . us reio . mls . common . models . response . listing response不能转换为class com . ossez . u sreio . mls . common . models . response . listing detail response(com . ossez . us reio . mls . common . models . response . listing detail response和com . ossez . us reio . mls . common . mod els . response . listing detail response在loader org . spring framework . boot . loader的未命名模块中
Java . lang . classcastexception:class com . ossez . us reio . mls . common . models . response . listing response不能转换为class com . ossez . us reio . mls . common . mod els . response . listing detail response(com . ossez . us reio . mls . common . models . response . listing response和com . ossez . us reio . mls . common . models . response . listing detail response在loader org . spring framework . boot . loader . launchedurlc的未命名模块中
问题和原因
这个问题的原因是继承类之间的转换错误。
同时这个错误是运行时错误,不是编译错误,所以你编译的时候就不存在这样的错误。
检查以下代码:
parent b=new parent();
子c=(子)b;
这种方法不能实现对象类型从超类到子类的转换。
上面的原因是,父类的对象是由父类创建的,然后你试图将父类创建的对象强制转换成子类。
因为父类创建的对象和子类要创建的对象使用不同的地址空间,转换时会出现地址空间引用错误,所以JVM会认为你要转换两种完全不同类型的对象,此时就会出现上面的运行时错误。
解决这个问题的方法是使用子类来创建父类,并强制将父类转换为子类。
使用这种创建方法可以确保使用相同的地址空间。
将上述语句更改为:
parent b=new Child();
子c=(子)b;
去做吧。
总结
关于java中java.lang.ClassCastException异常的原因及解决方法的文章到此为止。更多相关java.lang.ClassCastException异常,请搜索我们之前的文章或者继续浏览下面的相关文章。希望你以后能支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。