2012-04-03 3 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

Какая часть его класса вы говорите не Serializable? –

+0

Из определения класса wordObject все поля сериализуемы. – ManojGumber

Смежные вопросы