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;
}
Чтобы лучше помочь, опубликуйте [SSCCE] (http://sscce.org/). –
'Engine e' - это локальная переменная в вашем методе чтения. Вместо этого вы можете вызвать 'this.e', так как this.e ссылается на переменную класса, которая начинает иметь значение null. – porfiriopartida
Исправлен ваш заголовок. readObject() не «возвращает нулевые значения» вообще. Ваш собственный код делает это из-за ошибки. – EJP