我有一个名为 Flight 的类 Flight 类在实例化时会实例化另一个名为 SeatingChart 的类,而 SeatingChart 还会实例化另一个类,依此类推。
public class Flight implements Serializable
{
SeatingChart sc = new SeatingChart(); seating
//WaitingList wl = new WaitingList();
}
public class SeatingChart extends ListAndChart implements PassengerList, Serializable
{
public static final int NOT_FOUND = 42;
Passenger [] pass = new Passenger[40];
}
public class Passenger implements Serializable
{
private String firstName, lastName, fullName;
public String getName()
{
fullName = firstName + " " + lastName;
return fullName;
}
public void setFirstName(String firstName)
{
this.firstName = firstName;
}
public void setLastName(String lastName)
{
this.lastName = lastName;
}
}
我在另一个类中有另一个方法反序列化保存在磁盘中的对象
public void actionPerformed(ActionEvent evt)
{
Serialization.deserialize(sw101); <--- sw101 is a Flight object
.
.
.
}
//code for deserialization
public static void deserialize(Flight sw101)
{
String filename = "serialized.ser";
sw101 = null;
FileInputStream fis = null;
ObjectInputStream in = null;
try
{
fis = new FileInputStream(filename);
in = new ObjectInputStream(fis);
sw101 = (Flight)in.readObject();
System.out.println("sw101" + sw101.toString());
in.close();
}
catch(IOException ex)
{
ex.printStackTrace();
}
catch(ClassNotFoundException ex)
{
ex.printStackTrace();
}
}
我的问题是,当我将序列化对象分配给 sw101 时,在开始时实例化的所有 sw101 对象(如 SeatingChart sc 对象)也会获得文件中保存的任何内容,只要这些对象都实现了 Serializable 接口(interface),我不需要做任何事情吗?如果是这样,为什么我的代码不起作用?我做错了什么?
最佳答案
看起来你正试图通过引用参数返回(C/C++ 背景?)
这在 Java 中行不通。所有参数(包括引用)均按值传递。一旦你这样做了
sw101=null;
您丢失了对传入对象的引用。
您的反序列化
函数应该返回航类对象。
(技术上有一种方法可以通过使用数组在 Java 中模拟通过参数返回,但它会导致不必要的复杂代码)
关于java - 如何反序列化对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6379912/