解決java.lang.ClassCastException的java類(lèi)型轉(zhuǎn)換異常的問(wèn)題
在項(xiàng)目中,需要使用XStream將xml string轉(zhuǎn)成相應(yīng)的對(duì)象,卻報(bào)出了java.lang.ClassCastException: com.model.test cannot be cast to com.model.test的錯(cuò)誤。
原因:
項(xiàng)目中應(yīng)該是采用了熱部署,devtools,因?yàn)槔奂虞d器的不同所以會(huì)導(dǎo)致類(lèi)型轉(zhuǎn)換失敗
措施:
在pom.xml中將以下代碼注釋掉:
<dependency> <groupId>org.springframework.boot</groupId> <artifactId>spring-boot-devtools</artifactId> <scope>runtime</scope> </dependency>
補(bǔ)充知識(shí):TreeSet在add對(duì)象時(shí)報(bào)ClassCastException錯(cuò)誤
TreeSet實(shí)現(xiàn)了SortedSet接口,可以對(duì)集合中的對(duì)象進(jìn)行排序,但是在使用TreeSet時(shí)要注意一點(diǎn),那就是要給TreeSet傳遞一個(gè)比較器,也就是指定比較規(guī)則,否則的話(huà),它就不知道誰(shuí)大誰(shuí)小,也就不能排序了。此時(shí)它會(huì)報(bào)一個(gè)ClassCastException的異常。
jdk1.6文檔里add方法關(guān)于這個(gè)異常是這樣描述的:
Throws:
ClassCastException - if the specified object cannot be compared with the elements currently in this set
翻譯:ClassCastException - 如果指定的對(duì)象不能與當(dāng)前在此集合中的元素進(jìn)行比較
public class TreeSetTest { public static void main(String[] args) { MyComparator comparator = new MyComparator(); // TreeSet<Student> set = new TreeSet<Student>(comparator); // 錯(cuò)誤的代碼,少了比較器,運(yùn)行則報(bào)下面的異常。 TreeSet<Student> set = new TreeSet<Student>(); Student s1 = new Student(50); Student s2 = new Student(70); Student s3 = new Student(40); set.add(s1); set.add(s2); set.add(s3); System.out.println(set); } } class Student { int score; public Student(int score) { this.score = score; } @Override public String toString() { // TODO Auto-generated method stub return String.valueOf(this.score); } } class MyComparator implements Comparator<Student> { @Override //按分?jǐn)?shù)高低比較,int為返回負(fù)數(shù)、零、整數(shù),這里我寫(xiě)的不咋好,但意思一樣 public int compare(Student o1, Student o2) { // TODO Auto-generated method stub int result = 0; if(o1.score > o2.score) { result = 1; }else { result = -1; } return result; } }
錯(cuò)誤的運(yùn)行結(jié)果:
Exception in thread "main" java.lang.ClassCastException: com.shengsiyuan2.Student cannot be cast to java.lang.Comparable at java.util.TreeMap.compare(TreeMap.java:1294) at java.util.TreeMap.put(TreeMap.java:538) at java.util.TreeSet.add(TreeSet.java:255) at com.shengsiyuan2.TreeSetTest.main(TreeSetTest.java:17)
解決辦法:
把 TreeSet set = new TreeSet(); 改成:TreeSet set = new TreeSet(comparator);即可。
以上這篇解決java.lang.ClassCastException的java類(lèi)型轉(zhuǎn)換異常的問(wèn)題就是小編分享給大家的全部?jī)?nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
Java 正則表達(dá)式入門(mén)詳解(基礎(chǔ)進(jìn)階)
最近看到很多同學(xué)想要學(xué)習(xí)java正則表達(dá)式的一些知識(shí),那么腳本之家小編就為大家介紹一下,其實(shí)正則表達(dá)式實(shí)用性很強(qiáng),處理大幅文字的時(shí)候都需要用得到,語(yǔ)法也大同小異2017-10-10Spring?Cloud?Eureka基礎(chǔ)應(yīng)用及原理
這篇文章主要介紹了Spring?Cloud?Eureka基礎(chǔ)應(yīng)用,Eureka?Client中內(nèi)置一個(gè)負(fù)載均衡器,用來(lái)進(jìn)行基本的負(fù)載均衡,下面我們將通過(guò)搭建一個(gè)簡(jiǎn)單的Eureka例子來(lái)了解Eureka的運(yùn)作原理,感興趣的朋友一起看看吧2022-05-05spring boot使用properties定義短信模板的方法教程
這篇文章主要給大家介紹了關(guān)于spring boot使用properties定義短信模板的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01基于Spring定時(shí)任務(wù)的fixedRate和fixedDelay的區(qū)別
這篇文章主要介紹了基于Spring定時(shí)任務(wù)的fixedRate和fixedDelay的區(qū)別,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10SpringBoot使用log4j2將日志記錄到文件及自定義數(shù)據(jù)庫(kù)的配置方法
這篇文章主要介紹了SpringBoot使用log4j2將日志記錄到文件及自定義數(shù)據(jù)庫(kù)的配置方法,本文通過(guò)實(shí)例代碼給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友參考下吧2024-03-03Java switch()括號(hào)內(nèi)參數(shù)的類(lèi)型要求詳解
這篇文章主要介紹了Java switch()括號(hào)內(nèi)參數(shù)的類(lèi)型要求,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-10-10java.lang.Void 與 void的比較及使用方法介紹
這篇文章主要介紹了java.lang.Void 與 void的比較及使用方法介紹,小編覺(jué)得挺不錯(cuò)的,這里給大家分享一下,需要的朋友可以參考。2017-10-10