2012-04-03 10 views
-1

私が持っているこのクラス持つNotSerializableExceptionが実装Serializableを

public class wordObject implements java.io.Serializable 
    { 
     String wordName; 
     int occCount; 
     int count; 
     HashMap<Integer, Double> lineDict; 
     int[] mat; 

     public wordObject(String name,int num) 
     { 
      wordName = name; 
      occCount=1; 
      count = num; 
      lineDict=new HashMap<Integer,Double>(lineC); 
      mat = new int[lineC]; 

     } 

    } 

しかし、私はコードの一部を使用してディスクへのクラスのインスタンスを記述しようとすると、

public static writeObj(WordObject obj) 
    FileOutputStream f_out = new FileOutputStream(loc); 

      // Write object with ObjectOutputStream 
      ObjectOutputStream obj_out = new ObjectOutputStream (f_out); 

      // Write object out to disk,obj is instance of wordObject 
      obj_out.writeObject (obj); 
以下に示すよう

私はこのエラーが発生します

Exception in thread "main" java.io.NotSerializableException: searchTAemd 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.defaultWriteFields(Unknown Source) 
at java.io.ObjectOutputStream.writeSerialData(Unknown Source) 
at java.io.ObjectOutputStream.writeOrdinaryObject(Unknown Source) 
at java.io.ObjectOutputStream.writeObject0(Unknown Source) 
at java.io.ObjectOutputStream.writeObject(Unknown Source) 

何か助けが歓迎されるでしょう。

EDIT:HashMapが既にシリアライズ可能であることを確認しました。

+2

は、 'obj'は' wordObject'型のオブジェクトですか?エラーは、それが 'searchTAemd'から来たと言っています –

+0

これは完全にシリアライズ可能です。 objがwordObjectのインスタンスであることは確かですか? – ManojGumber

+1

私はこれをobj = new wordObject( "foo"、3)でテストしました。それはエラーなしで動作します... objは、直列化できない別の型を参照している必要があります。 – Adam

答えて

6

wordObjectは内部クラスであり、内部クラスは常にその外部クラスへの暗黙の参照を保持しているため、外部クラスも直列化可能でない限り、内部クラスを直列化できません。実際に試してみることも勧められません。

serialization specificationから;ローカルおよび匿名クラスを含む内部クラス( 静的メンバクラスではない、すなわち、ネストされたクラス)の

シリアライゼーションは、 が強く、いくつかの理由のために推奨されます。非静的コンテキストで宣言された内部クラス には暗黙の非一時的な の参照が含まれているため、このような内部の クラスインスタンスを直列化すると、関連付けられた外部の クラスインスタンスも直列化されます。

-3

シリアル化を行うときには、オブジェクトに到達できるすべてのオブジェクト(つまり、メンバー変数やメンバのメンバーなど)は直列化可能でなければならないか、この例外が発生します。これはオブジェクトの直列化によくある問題

+0

あなたのクラスのどの部分がシリアライズ可能ではないと言っていますか? –

+0

wordObjectのクラス定義から、すべてのフィールドが直列化可能です。 – ManojGumber

関連する問題