java.lang.ClassCastException

來源:互聯網
上載者:User

ClassCastException,從字面上看,是類型轉換錯誤,通常是進行強制類型轉換時候出的錯誤。下面對產生ClassCastException異常的原因進行分析,然後給出這種異常的解決方案。

這種異常是如何產生的呢?舉一個比較形象的例子。

Animal表示動物,Dog表示狗,是動物的子類,Cat表示貓,是動物的子類。看下面的代碼:

Animal a1 = new Dog();  // 1

Animal a2 = new Cat();  // 2

 

Dog d1 = (Dog)a1;         //3

Dog d2 = (Dog)a2;        //4

第3行代碼和第4行代碼基本相同,從字面意思看都是把動物(Animal)強制轉換為狗(Dog),但是第4行代碼將產生java.lang.ClassCastException。原因是你要把一個貓(a2這隻動物是貓)轉換成狗,而第3行中是把狗轉換成狗,所以可以。

從上面的例子看,java.lang.ClassCastException是進行強制類型轉換的時候產生的異常,強制類型轉換的前提是父類引用指向的對象的類型是子類的時候才可以進行強制類型轉換,如果父類引用指向的對象的類型不是子類的時候將產生java.lang.ClassCastException異常。就是上面a1和a2都是動物,但是a1這隻動物是一隻狗,而a2這隻動物是貓,所以要把a1轉換成狗可以,因為a1本身就是狗,而a2是一隻貓,所以要轉換成狗就出錯了。

遇到這樣的異常的時候如何解決呢?如果你知道要訪問的的對象的具體類型,直接轉換成該類型即可。如果不能確定類型可以通過下面的兩種方式進行處理(假設對象為o):

1、通過o.getClass().getName()得到具體的類型,可以通過輸出語句輸出這個類型,然後根據類型進行進行具體的處理。

2、通過if(o instanceof 類型)的語句來判斷o的類型是什麼。

 

 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.