【发布时间】:2016-01-01 09:55:32
【问题描述】:
我目前正在使用 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 扩展了 Serializable
唯一的时间状态为空是在我反序列化文件之后。不能通过任何修改器将其设置为 null。
【问题讨论】:
-
请解释一下。如果要序列化,为什么要标记为
transient? -
该类包含大量数据,而这正是我为使其更清晰而提供的数据。我的其中一个瞬态值(状态)没有理由保存,因为它必须在创建对象时设置为 IDLE。
标签: java serialization transient