В настоящее время я использую встроенный сериализатор JAVA java.io.Serializable
и, похоже, не может его десериализовать и установить для моих полей значения по умолчанию. Я даже попытался использовать readObject
для инициализации полей, но он просто не работает.Переходные поля становятся нулевыми после десериализации?
Вот мой код:
public abstract class BossQuest implements Quest,
Listenable { //Quest(interface) extends Serializable
private transient Status status = Status.IDLE; //This does not work
private String name;
public BossQuest(String name) {
this.name = name;
initialize();
}
//This also does not work
public BossQuest() {
this.status = Status.IDLE;
}
//This was my hacky attempt to forcefully set default values (Does not work)
public void initialize() {
status = Status.IDLE;
}
private void readObject(ObjectInputStream ois) throws ClassNotFoundException, IOException {
ois.defaultReadObject();
initialize();
}
public Status getStatus() {
System.out.print("Requesting status!");
if (status == null) {
System.out.print("Status is.. null..?");
}
System.out.print(status);
return status;
}
}
В моем коде выше, Quest расширяет Сериализуемый
статус только время является нулевым после я десериализации файла. Он НЕ МОЖЕТ быть установлен на нуль через любой из мутаторов.
Пожалуйста, объясните. Если вы хотите, чтобы он был сериализован, почему вы отмечаете его как «переходный»? – EJP
Класс содержит много данных, а затем только то, что я предоставил, чтобы сделать его более чистым. Одно из моих значений переходного процесса (состояние) не имеет причины для сохранения, потому что оно должно быть установлено на IDLE при создании объекта. – asd7l