我有一个名为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接口,我就可以获取文件中保存的内容而不做任何事情?如果是这样,为什么我的代码不起作用?我做错了什么?
答案 0 :(得分:2)
看起来你正试图通过参考参数(C / C ++背景?)
返回这在Java中无效。所有参数(包括引用)都按值传递。一旦你做了
sw101=null;
您将丢失对传入的对象的引用。
您的deserialize
功能应返回航班对象。
(从技术上讲,有一种方法可以模拟通过使用数组返回Java中的参数,但会导致不必要的复杂代码)
答案 1 :(得分:0)
在java中,所有参数都作为值传递..所以你上一个问题的答案是否定的。 sw101
是对副本的引用。
如上所述,您必须返回反序列化的对象才能使其正常工作。