2010-08-18 68 views
18

通常是什麼原因得到java.lang.ClassCastException ..?我碰到下面的錯誤在我的應用java.lang.ClassCastException

java.lang.ClassCastException: [Lcom.rsa.authagent.authapi.realmstat.AUTHw 
+0

看起來你沒有完整的異常消息。假設你使用的是Java 5或更高版本,這個例外應該包括*什麼*不能被轉換成*什麼*例如'java.lang.ClassCastException:java.lang.String不能轉換爲java.lang.Integer' – mikej 2010-08-18 10:45:10

回答

36

根據the documentation

拋出,表明代碼試圖施放一個Object到它的子類 它不是一個實例。例如,下面的代碼生成一個ClassCastException

Object x = new Integer(0); 
System.out.println((String)x); 
+5

對於documentaton。例外的文件通常會給出一個很好的暗示,可能是錯誤的。 – 2010-08-18 10:46:57

+0

+1文件!如果你不想一直使用谷歌,你可以下載java庫的源代碼(或者搜索你的java sdk文件夾中是否有src.zip)。然後,如果你將它鏈接到你的項目,你可以打開相關的文件,並閱讀那裏的javadoc ... – 2010-08-18 15:16:27

+0

bine Laur,ce mic e internetul :) – ieugen 2013-07-24 06:01:38

2

這是因爲你鑄造錯誤的事情 - 你想轉換爲特定的類型,以及您的明確指的對象是與該類型不相容。例如:

Object x = "this is a string"; 
InputStream y = (InputStream) x; // This will throw ClassCastException 

如果你能提供一個代碼示例,這將真正幫助...

0
ClassA a = <something>; 
ClassB b = (ClassB) a; 

的第二線將失敗如果ClassA的不是ClassB的的一個子類,並且將拋出ClassCastException。

6

@LaurenţiuDascălu的答案解釋了/爲什麼得到一個ClassCastException。

您的異常消息對我來說看起來相當可疑,但它可能會幫助您知道「[Lcom.rsa.authagent.authapi.realmstat.AUTHw」表示您嘗試投射的對象的實際類型是com.rsa.authagent.authapi.realmstat.AUTHw[];即它是一個數組對象。

通常情況下,接下來的步驟來解決這樣的問題是:

  • 檢查堆棧跟蹤找出哪行哪類拋出異常,
  • 檢查相應的源代碼,看什麼預期類型和
  • 回溯查看具有「錯誤」類型的對象來自何處。
12

A ClassCastException ocurrs當您嘗試將對象的實例強制轉換爲不是的對象類型時。鑄造僅在鑄造物件遵循與您要鑄造的類型「是一種」關係時纔有效。例如

Apple myApple = new Apple(); 
Fruit myFruit = (Fruit)myApple; 

這是有效的,因爲蘋果'是'水果。但如果我們扭轉這一點。

Fruit myFruit = new Fruit(); 
Apple myApple = (Apple)myFruit; 

這將拋出ClasCastException,因爲Fruit不是(總是)Apple。

這是很好的做法,以防範任何顯式轉換與instanceof首先檢查:

if (myApple instanceof Fruit) { 
    Fruit myFruit = (Fruit)myApple; 
} 
+0

如果最後一個例子更改爲'if(myFruit instanceof Apple){Apple myApple =(蘋果)myFruit; }',它會更具說明性 – AnnabellChan 2016-07-12 03:23:03

1

爲了避免x !instance of Long概率 添加

<property name="openjpa.Compatibility" value="StrictIdentityValues=false"/> 

在你的持久性。xml

相關問題