我想知道如何通过同一程序的不同风格安全地使用序列化对象。像这样考虑两个 A 类和 B 类:
public class A implements Serializable
{
private String myText = null;
public A()
{
myText = B.text;
B.myMethod();
}
}
在另一个文件中:
public class B
{
/* EDITED */
private static A myA = null;
public static String text = "B1_text";
public static void saveA()
{
myA = new A();
/* blablabla */
objectOutputStream.writeObject(myA);
/* blablabla */
}
public static void loadA()
{
/* blablabla */
myA = objectInputStream.readObject();
/* blablabla */
}
public static void myMethod()
{
/* some stuff */
}
public static void not_A_related_method()
{
/* some stuff */
}
}
现在我打开我的程序,打电话
B.saveA();
将 A 保存到文件中,然后关闭程序。如果我稍后从文件中加载 A,调用
B.loadA();
不会有什么不好的事情发生。
但是,如果我将 B 类(在将 A 类从未触及的 B 类保存到文件之后)更改为不同的东西,例如:
public class B
{
/* EDITED */
private static A myA = null;
public static String text = "B2_COMPLETELY_DIFFERENT_TEXT";
public static void saveA()
{
myA = new A();
/* blablabla */
objectOutputStream.writeObject(myA);
/* blablabla */
}
public static void loadA()
{
/* blablabla */
myA = objectInputStream.readObject();
/* blablabla */
}
public static void myMethod()
{
/* some NEW stuff */
}
public static void not_A_related_method()
{
/* some NEW stuff */
}
public static void ANOTHER_not_A_related_method()
{
/* some stuff */
}
}
然后我打电话
B.loadA(); //(loading a previously saved file)
真的会发生什么?
我经历过一切都很顺利,但是从序列化对象中改变静态引用的方法和字段还能走多远?