2011-10-30 18 views
1

Javaオブジェクトxxがnullでない場合、getClass()メソッドを使用して取得できるオブジェクトの対応するClassオブジェクトが必要ですが、このメソッドは実行時にnullを返します。非常に奇妙な。javaオブジェクトgetClass()メソッドがnullを返す

例:

オブジェクト(oldFact)が吹いたとしてExternalFactUpdateDroolsEventクラスで参照されているserializbleオブジェクトで、この呼び出しはシリアライズし、それにdeserilized excution処理のget、タイプExternalFactUpdateDroolsEventの最初の多くのオブジェクトを取得シリアライズ後者取得手段このプロセスで実行する前に、いくつかの時間oldFactオブジェクトは、問題を引き起こしているnullClassオブジェクトを返します。

私の質問は、オブジェクトがない場合ですnull how getClass()メソッドはnullを返しますか?これは、オブジェクトを適切に初期化しない/インスタンス化しないなどの理由で、これらのオブジェクトが別のJVMからシリアル化されて、1つの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.getClassにはnullポインタ例外()oldFactがnullではないと確信しています

を。 call、 クラスobjecrのfactClassがnullがアサートされている他のメンデントに渡されています。つまり、例外がスローされている です。以下のコードと例外を参照してください。 事前に助けていただきありがとうございます。

+5

は、なぜあなたはそれがnullを返すと思いますか? –

+5

'.getClass()'は 'null'を返すことができません。 – Bozho

+0

OldFactをExternalFactUpdateDroolsEventまたはそれが属するクラスにボックス化(キャスト)します – emaillenin

答えて

10

私はあなたがこの行にNullPointerExceptionが受け取ることを推測してみましょう:事実のに

Class factClass = oldFact.getClass(); 

、はgetClass()はnullを(返すことはできませんことをEDIT:はgetClass()はnullを返します場合でも、 、それはNullPointerExceptionを引き起こさないでしょう)、oldFactはnullでなければなりません。

+2

さらに、もし* * getClass()*が返されたとしても、これはあなたが提供したコードに問題を引き起こさないでしょう。 – JimmyB

+1

ああ、それを編集させてください... – Sibbo

+2

申し訳ありませんが、実際にはOPを参照していました。 – JimmyB

0

全体のポイントは、あなたがoldfact.getclass()を入力するときに

edit--

を得るためには何もありません、あなたは ExternalFactUpdateDroolsEventでハンドルを送信するときoldfactはnullオブジェクトのままのでoldfact nullであるあなたはNULLポインタを送っているため、あります

か、後半相手にビットAltough ExternalFactUpdateDroolsEvent

0

を呼び出す前に、メソッドexecuteactionを呼び出す場合に発生します、私はちょうど同じ答えを、この検索を見ました。新しいオブジェクトとしてprivate Object oldFact;を初期化する必要はありませんか?

private Object oldFact; 

private Object oldFact = new Object(); 
+0

コードサンプルタグ内にコードスニペットを追加することをお勧めします。 – Hatef

関連する問題