2012-07-17 21 views
0

在我的門戶應用程序中試圖調用context.lookup()調用的結果時,我得到ClassCastException三次嘗試中的兩次來投擲不同的結果。無法繞過ClassCastException

經過一番研究,我認爲這個:http://wiki.sdn.sap.com/wiki/display/TechTSG/%28AS+Java%29+ClassCastException+Occurs+After+Lookup+Operation有答案,但它並沒有解釋如何執行這兩個步驟。

此代碼用於獲取的iView中的細節,從存儲在list其路徑:

IiView transView1 = (IiView) context.lookup(list.get(i).toString()); 

但獲取工作集的細節時,是這樣的:

IPcdContext attrSet = (IPcdContext) context.lookup(list.get(i).toString()); 

我得到了ClassCastException 。任何幫助或解釋爲什麼我得到這個錯誤將不勝感激!

編輯:這是什麼代碼是基於:http://www.sdn.sap.com/irj/scn/go/portal/prtroot/docs/library/uuid/6112ecb7-0a01-0010-ef90-941c70c9e401?overridelayout=true

EDIT2:我回來從context.lookup目的是com.sapportals.portal.pcd.pcm.roles.PortalWorkset,我無法找到的文檔。

+1

什麼是確切的異常文本? – jtahlborn 2012-07-17 15:46:21

+2

大概你會得到異常,因爲無論你從'context.lookup'返回的是不是'IPcdContext'。你應該把它作爲一個Object來捕獲,並執行'.getClass()。getName()'來找出你得到的結果。 – 2012-07-17 15:46:58

回答

1

如果context.lookup返回的是PortalWorkset,那麼就沒有辦法「繞開」ClassCastException。

Casting不會轉換爲另一個類的對象 - 這只是一種告訴編譯器您確定它是比當前聲明類型更具體的類的方法。在這種情況下,你說「我意識到lookup()方法被聲明返回Object,但是當我在這個特定的上下文中調用它時,我確信它總是會返回一個IPcdContext對象。」你的假設結果不成立,程序通過拋出異常正確地表明瞭這一點。

有可能的兩種原因,您的問題:

  1. 你的假設是,一般正確的,但由於你不通過你所期望的lookup方法的字符串中的邏輯錯誤,因此是把錯誤的東西全部弄回來。在這種情況下,確保傳遞給該方法的參數始終正確。
  2. 你的假設是不正確的,你可能不是總是得到IPcdContext回來。在這種情況下,您需要決定如何處理返回的其他對象,並適當處理它們(您可以使用instanceof運算符來檢查返回對象的類)。

在任何情況下,只要你做一個投它通常是有益的檢查,它會首先取得成功,與像一個成語:

IPcdContext context; 
Object obj = context.lookup("foo"); 
if (obj instanceof IPcdContext) { 
    context = (IPcdContext)obj; 
} 
else { 
    // You got back something else. What to do? 
} 
相關問題