1
假設你有以下結構(簡化):接口實現和Java序列
interface Inter
{
//...
}
class Impl1 implements Inter, Serializable
{
private static final long serialVersionUID = ...;
//...
}
class Impl2 implements Inter, Serializable
{
private static final long serialVersionUID = ...;
//...
}
class MyClass implements Serializable {
private static final long serialVersionUID = ...;
Inter interInstance; // can be Impl1, Impl2...
}
後來,你添加一個新的實現:
class Impl3 implements Inter, Serializable
{
private static final long serialVersionUID = ...;
//...
}
...,有三個班結束該MyClass.interInstance可以承擔。
是否應該對已經序列化的MyClass對象有任何影響?
我在問這是因爲用戶(Android應用程序)一直在抱怨在更新模擬上述示例的更新之後無法打開某些序列化對象(即,我只添加了新的可串行化接口實現)。
我的意思是你可以在MyClass(interInstance)中有一個可以是Impl1或Impl2(都可序列化)的字段。稍後添加第三個實現(Impl3),現在在MyClass實例中的interInstance可以是Impl1,Impl2或Impl3。問題是這個添加是否可以在從Impl3存在之前創建的文件中讀取序列化對象時產生影響。 – user1987392
@ user1987392這取決於你的影響力。序列化的對象不會改變,但我是如何寫的。如果將對象序列化爲Impl2,則必須將其反序列化爲Impl2,而不是Impl3。 – Sajmon
通過影響我的意思是一個ObjectInputStream仍然能夠讀取序列化對象具有Impl1或Impl2作爲interInstance的(舊)文件。 – user1987392