Java中java.lang.ClassCastException异常原因及解决方法

 更新时间:2022年01月24日 10:39:26   作者:HoneyMoose  
大家好,本篇文章主要讲的是Java中java.lang.ClassCastException异常原因及解决方法,感兴趣的同学赶快来看一看吧,对你有帮助的话记得收藏一下

通常我们在 OOP 设计中都会使用到继承。

Java 继承关系中的 java.lang.ClassCastException 错误_java

​​但是在继承对象之间的强制转换可能会遇到​​java.lang.ClassCastException​​异常的错误。

错误的日志如下:

19:58:25.010 [http-nio-8080-exec-5] ERROR o.a.c.c.C.[.[.[.[dispatcherServlet] - Servlet.service() for servlet [dispatcherServlet] in context with path [] threw exception [Request processing failed; nested exception is java.lang.ClassCastException: class com.ossez.usreio.mls.common.models.response.ListingResponse cannot be cast to class com.ossez.usreio.mls.common.models.response.ListingDetailResponse (com.ossez.usreio.mls.common.models.response.ListingResponse and com.ossez.usreio.mls.common.models.response.ListingDetailResponse are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @4ee285c6)] with root cause
java.lang.ClassCastException: class com.ossez.usreio.mls.common.models.response.ListingResponse cannot be cast to class com.ossez.usreio.mls.common.models.response.ListingDetailResponse (com.ossez.usreio.mls.common.models.response.ListingResponse and com.ossez.usreio.mls.common.models.response.ListingDetailResponse are in unnamed module of loader org.springframework.boot.loader.LaunchedURLClassLoader @4ee285c6)

Java 继承关系中的 java.lang.ClassCastException 错误_父类_02

​​问题和原因

这个问题出现的原因就是继承类之间强制转换的错误。

同时这个错误是运行时错误,不是编译错误,因此你编译的时候是没有这个错误的。

考察下面的代码:

Parent b = new parent();
Child c = (Child) b ;

采用该方法不能实现对象类型由超类向子类的转换。

上面的原因是父类的对象是由父类创建的,然后你尝试将父类创建的对象强制转换到子类中。

因为父类创建的对象和子类需要创建的对象分别使用不同的地址空间,那在转换的时候将会出现地址空间引用的错误,因此 JVM 会认为你将 2 个完全不同类型的对象进行转换,这个时候出现上面的运行时错误。

要解决这个问题的办法就是在创建父类的时候使用子类来创建,并且强制将创建的父类转换为子类就可以了。

使用这种创建方法就能保证使用相同的地址空间。

将上面的语句改成:

Parent b = new Child ();
Child c = (Child) b ;

就可以了。

总结

到此这篇关于Java中java.lang.ClassCastException异常原因及解决方法的文章就介绍到这了,更多相关java.lang.ClassCastException异常内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • java中final关键字使用示例详解

    java中final关键字使用示例详解

    Java中的final关键字非常重要,它可以应用于类、方法以及变量。这篇文章中带你看看什么是final关键字?将变量,方法和类声明为final代表了什么?使用final的好处是什么?最后也有一些使用final关键字的实例
    2014-01-01
  • 使用阿里云OSS的服务端签名后直传功能的流程分析

    使用阿里云OSS的服务端签名后直传功能的流程分析

    这篇文章主要介绍了使用阿里云OSS的服务端签名后直传功能,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2020-09-09
  • Java避免死锁_动力节点Java学院整理

    Java避免死锁_动力节点Java学院整理

    在有些情况下死锁是可以避免的。本文将展示三种用于避免死锁的技术。对java避免死锁的相关知识感兴趣的朋友一起通过本文学习吧
    2017-06-06
  • Java并发(Runnable+Thread)实现硬盘文件搜索功能

    Java并发(Runnable+Thread)实现硬盘文件搜索功能

    这篇文章主要介绍了Java并发(Runnable+Thread)实现硬盘文件搜索,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2021-01-01
  • 学习java编程后可以走哪些职业道路

    学习java编程后可以走哪些职业道路

    在本篇文章里给大家介绍了关于学习java后的职业道路,以及需要学习的相关知识内容,有兴趣的朋友们可以跟着学习下。
    2022-11-11
  • jQuery 动画效果代码分享

    jQuery 动画效果代码分享

    本文给大家分享一段关于jquery实现的动画效果,代码简单易懂,非常不错,感兴趣的朋友参考下
    2016-11-11
  • 浅谈SpringBoot项目打成war和jar的区别

    浅谈SpringBoot项目打成war和jar的区别

    这篇文章主要介绍了浅谈SpringBoot项目打成war和jar的区别,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-11-11
  • spring boot定时任务接收邮件并且存储附件的方法讲解

    spring boot定时任务接收邮件并且存储附件的方法讲解

    今天小编就为大家分享一篇关于spring boot定时任务接收邮件并且存储附件的方法讲解,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
    2019-03-03
  • 浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    浅谈Java中实现深拷贝的两种方式—clone() & Serialized

    这篇文章主要介绍了Java中实现深拷贝的两种方式—clone() & Serialized,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2019-03-03
  • Java基础之SpringBoot整合knife4j

    Java基础之SpringBoot整合knife4j

    Swagger现在已经成了最流行的接口文档生成与管理工具,但是你是否在用的时候也在吐槽,它是真的不好看,接口测试的json数据没法格式化,测试地址如果更改了还要去改配置,接口测试时增加token验证是真的麻烦…针对Swagger的种种缺点,Knife4j就呼之欲出了.需要的朋友可以参考下
    2021-05-05

最新评论