自定義序列化的好處之一是可以添加瞬態字段(如從其他類繼承)到序列化過程中。你可以這樣做
class NotMyClass implements Serializable {
String login;
transient String password;
//...
}
//I want to serialize also transient password field
class MyClass extends NotMyClass {
private void writeObject(ObjectOutputStream out) throws IOException {
System.out.println("defaul serialization");
out.defaultWriteObject();
System.out.println("my serialization >>>> adding inherited transient value");
out.writeObject(password);
}
private void readObject(ObjectInputStream in) throws IOException,
ClassNotFoundException {
System.out.println("defaul deserialization");
in.defaultReadObject();
System.out.println("my deserialization <<<< reading stored transient value");
password = (String) in.readObject();
}
}
在什麼情況下,這將是明智的?我想不出爲什麼你想要使你實現的接口所需的方法無效。 –
當您不想維護由可序列化接口實現自動維護的超類的狀態 – peter
再次,在什麼情況下,這是可取的。如果超級類是可序列化的,那大概是有原因的?如果您否定了預期的功能,那麼您不會對所述簽名的合同進行編碼。這是要求錯誤和錯誤的代碼。 –