Java中java.lang.ClassCastException異常原因及解決方法
通常我們在 OOP 設(shè)計中都會使用到繼承。

??但是在繼承對象之間的強(qiáng)制轉(zhuǎn)換可能會遇到??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)

??問題和原因
這個問題出現(xiàn)的原因就是繼承類之間強(qiáng)制轉(zhuǎn)換的錯誤。
同時這個錯誤是運(yùn)行時錯誤,不是編譯錯誤,因此你編譯的時候是沒有這個錯誤的。
考察下面的代碼:
Parent b = new parent(); Child c = (Child) b ;
采用該方法不能實(shí)現(xiàn)對象類型由超類向子類的轉(zhuǎn)換。
上面的原因是父類的對象是由父類創(chuàng)建的,然后你嘗試將父類創(chuàng)建的對象強(qiáng)制轉(zhuǎn)換到子類中。
因?yàn)楦割悇?chuàng)建的對象和子類需要創(chuàng)建的對象分別使用不同的地址空間,那在轉(zhuǎn)換的時候?qū)霈F(xiàn)地址空間引用的錯誤,因此 JVM 會認(rèn)為你將 2 個完全不同類型的對象進(jìn)行轉(zhuǎn)換,這個時候出現(xiàn)上面的運(yùn)行時錯誤。
要解決這個問題的辦法就是在創(chuàng)建父類的時候使用子類來創(chuàng)建,并且強(qiáng)制將創(chuàng)建的父類轉(zhuǎn)換為子類就可以了。
使用這種創(chuàng)建方法就能保證使用相同的地址空間。
將上面的語句改成:
Parent b = new Child (); Child c = (Child) b ;
就可以了。
總結(jié)
到此這篇關(guān)于Java中java.lang.ClassCastException異常原因及解決方法的文章就介紹到這了,更多相關(guān)java.lang.ClassCastException異常內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- java.lang.ExceptionInInitializerError異常的解決方法
- 文件路徑正確,報java.io.FileNotFoundException異常的原因及解決辦法
- java.lang.NullPointerException異常問題解決方案
- 解決java.util.NoSuchElementException異常的問題
- Java 異常java.lang.NoSuchFieldException解決方案
- Java類加載異常:java.lang.ClassNotFoundException解決方法
- 詳解Java中NullPointerException異常的原因詳解以及解決方法
- java.nio.file.InvalidPathException異常解決
相關(guān)文章
IntelliJIDEA中實(shí)現(xiàn)SpringBoot多實(shí)例運(yùn)行的兩種方式
在微服務(wù)開發(fā)中,經(jīng)常需要同時啟動多個服務(wù)實(shí)例進(jìn)行測試或模擬集群環(huán)境,?IntelliJ?IDEA?作為Java開發(fā)者常用工具,提供了靈活的多實(shí)例啟動支持,本文將詳細(xì)介紹如何通過修改配置?和批量啟動?兩種方式實(shí)現(xiàn)SpringBoot多實(shí)例運(yùn)行,并解決常見問題,需要的朋友可以參考下2025-03-03
新手入門學(xué)習(xí)Spring Freemarker教程解析
這篇文章主要介紹了新手入門學(xué)習(xí)Freemarker教程解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-10-10
Java注解如何基于Redission實(shí)現(xiàn)分布式鎖
這篇文章主要介紹了Java注解如何基于Redission實(shí)現(xiàn)分布式鎖,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下2020-01-01
工具類之關(guān)于RestTemplateUtil工具類的使用
這篇文章主要介紹了工具類之關(guān)于RestTemplateUtil工具類的使用,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2022-10-10
IntelliJ IDEA創(chuàng)建maven多模塊項(xiàng)目(圖文教程)
這篇文章主要介紹了IntelliJ IDEA創(chuàng)建maven多模塊項(xiàng)目(圖文教程),非常具有實(shí)用價值,需要的朋友可以參考下2017-09-09
Maven項(xiàng)目中將本地依賴庫打包到最終的JAR中的實(shí)現(xiàn)
本文主要介紹了Maven項(xiàng)目中將本地依賴庫打包到最終的JAR中的實(shí)現(xiàn),將本地依賴安裝到Maven本地倉庫,可以避免使用system作用域帶來的不可移植性和打包問題,感興趣的可以了解一下2025-05-05

