2013-10-02 4 views
0

У меня есть следующий класс. Мой атрибут двигатель приходит в нуль каждый раз, хотя я прочитал его значение из readObjectНеожиданные нулевые значения после пользовательской десериализации

public class Car implements Serializable { 

    private int regId; 
    transient Engine e; 


private void writeObject(ObjectOutputStream oos) { 
     try { 
      oos.defaultWriteObject(); 
      oos.writeInt(e.horsePower); 

     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 

    private void readObject(ObjectInputStream oxos) { 
     try {  
      oxos.defaultReadObject(); 
      Engine e = new Engine(oxos.readInt());    

     } catch (Exception e) { 
      e.printStackTrace(); 
      // TODO: handle exception 
     } 
} 

public class Engine {  
     int horsePower;  
    } 
+0

Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –

+2

'Engine e' - это локальная переменная в вашем методе чтения. Вместо этого вы можете вызвать 'this.e', так как this.e ссылается на переменную класса, которая начинает иметь значение null. – porfiriopartida

+0

Исправлен ваш заголовок. readObject() не «возвращает нулевые значения» вообще. Ваш собственный код делает это из-за ошибки. – EJP

ответ

4

Вы не назначайте поле e - это время омрачены локальной переменной, созданной с помощью Engine e = new Engine(oxos.readInt());.

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