2011-10-30 164 views
1

我的理解是,如果一個Java對象xx是不是必須有相應的可以開始使用getClass()方法對象Class對象爲空,但有些時候這種方法在運行時即返回null很奇怪。Java對象的getClass()方法返回null

實施例:

對象(oldFact)是在ExternalFactUpdateDroolsEvent類引用作爲吹serializble對象,則此呼叫得到串行化並deserilized在它的excution過程,意味着ExternalFactUpdateDroolsEvent類型的第一多個對象獲取序列化和後者得到在執行之前已滅絕,在此過程中有一段時間oldFact對象返回nullClass導致問題的對象。

我的問題是如果一個對象不是nullgetClass()方法如何返回null?這是否與deserilized對象有關,因爲在沒有正確初始化/實例化或其他某些事情時,這些對象可能會從不同的JVM序列化,然後在一個JVM上執行。

public class ExternalFactUpdateDroolsEvent implements DroolsEvent { 

    private static final long serialVersionUID = -8225631607832350264L; 

    private Object oldFact; 

    public ExternalFactUpdateDroolsEvent(Object oldFact) { 
     this.oldFact = oldFact; 
     this.updatedFact = updatedFact; 
    } 

    public void executeAction(StatefulKnowledgeSession ksession) { 
     // some time getClass() returns null that is strange 
     Class factClass = oldFact.getClass(); 

     ........................ 
    } 

    ...................... 
} 

添加更多內容:

我肯定oldFact不爲空,因爲在oldFact.getClass沒有空指針異常();調用, Class objecr factClass正在被傳遞給其中的null被聲明爲 ,我們拋出了異常。請參閱下面的代碼和例外。 我很感激你的幫助。

+5

爲什麼你認爲它返回null? –

+5

'.getClass()'不能返回'null'。 – Bozho

+0

Box(cast)oldFact到ExternalFactUpdateDroolsEvent或它屬於的任何類 – emaillenin

回答

10

讓我猜,你在這行得到一個NullPointerException:

Class factClass = oldFact.getClass(); 

由於這樣的事實,那的getClass()不能返回null(編輯:即使的getClass()將返回null ,那不會導致NullPointerException),那麼oldFact必須是null。

+2

此外,即使* if * * getClass()*返回* null *這不會導致您提供的代碼中的問題。 – JimmyB

+1

哦,是的,讓我編輯它... – Sibbo

+2

對不起,實際上是指OP :) – JimmyB

0

整點是,oldfact爲null,因爲當你在ExternalFactUpdateDroolsEvent送手柄,使oldfact仍然是一個空對象發送一個空指針,所以當你鍵入oldfact.getclass()沒有什麼讓

edit--

或出現這種情況,如果你調用ExternalFactUpdateDroolsEvent

0

Altough有點遲到了之前調用方法executeaction,我剛看到這個搜索相同的答案。 private Object oldFact;不應該被初始化爲一個新的對象嗎?

private Object oldFact; 

到:

private Object oldFact = new Object(); 
+0

將代碼片段添加到代碼示例標籤中是一種很好的做法。 – Hatef