2012-04-03 7 views
-1

Ich habe diese Klassenotserializableexception für ein Objekt, dessen Klasse implementiert 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]; 

     } 

    } 

Aber wenn ich versuche, eine Instanz der Klasse auf die Platte zu schreiben, ein Stück Code wie unten angegeben

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); 

ich erhalte diesen Fehler

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) 

Jede Hilfe wird sehr willkommen.

EDIT: Ich habe überprüft, dass HashMap bereits Serializable implementiert.

+2

ist 'obj' ein Objekt vom Typ' wordObject'? Der Fehler sagt, dass es von 'searchTAemd' kam –

+0

das sieht perfekt serializable. Sind Sie sicher, dass das Obj eine Instanz von wordObject ist? – ManojGumber

+1

Ich habe das gerade mit obj = new wordObject ("foo", 3) getestet; es funktioniert ohne Fehler ... obj muss einen anderen Typ referenzieren, der nicht serialisierbar ist. – Adam

Antwort

6

Da wordObject eine innere Klasse ist und eine innere Klasse immer einen impliziten Verweis auf ihre äußere Klasse enthält, können Sie eine innere Klasse nicht serialisieren, es sei denn, die äußere Klasse ist ebenfalls serialisierbar. Eigentlich ist es nicht einmal zu empfehlen;

Von der serialization specification;

Serialisierung von inneren Klassen (das heißt, verschachtelte Klassen, die nicht statische Elementklassen sind), einschließlich lokalen und anonymen Klassen wird stark aus mehreren Gründen abgeraten. Da die in nicht statischen Kontexten deklarierten inneren Klassen implizite nicht-transiente Verweise auf umschließende Klasseninstanzen enthalten, führt das Serialisieren einer solchen inneren Klasseninstanz ebenfalls zur Serialisierung der zugehörigen äußeren Klassenklasse .

-3

Bei der Serialisierung müssen alle Objekte, die Ihr Objekt erreichen kann (dh seine Elementvariablen und die Mitglieder seiner Elemente usw.) serialisierbar sein, oder Sie erhalten diese Ausnahme. Dies ist ein häufiges Problem bei der Objektserialisierung.

+0

Welcher Teil seiner Klasse ist nicht serialisierbar? –

+0

Von der Klassendefinition von wordObject sind alle Felder serialisierbar. – ManojGumber

Verwandte Themen