我正在尝试使用XMLEncoder
序列化具有另一个ArrayList的类的ArrayList。可以吗?
这是我的代码片段:
public class Model {
private ArrayList<Student> students;
private ArrayList<Module> modules;
//...
public void saveStudentsXML() throws IOException {
XMLEncoder encoder=new XMLEncoder(new BufferedOutputStream(new FileOutputStream("students.xml")));
encoder.writeObject(students);
encoder.close();
}
public void loadStudentsXML() throws IOException {
XMLDecoder decoder=new XMLDecoder(new BufferedInputStream(new FileInputStream("students.xml")));
students=(ArrayList<Student>)decoder.readObject();
decoder.close();
}
//this works fine
public void saveModulesXML() throws IOException {
XMLEncoder encoder=new XMLEncoder(new BufferedOutputStream(new FileOutputStream("modules.xml")));
encoder.writeObject(modules);
encoder.close();
}
public void loadModulesXML() throws IOException {
XMLDecoder decoder=new XMLDecoder(new BufferedInputStream(new FileInputStream("modules.xml")));
modules=(ArrayList<Module>)decoder.readObject();
decoder.close();
}
//this does not
}
Module
类有另一个Student
类的ArrayList(每个模块都有一个已注册学生的列表),
private ArrayList<Student> enrolledStudents;
当我查看XML时,似乎没有关于enrolledStudents ArrayList的任何信息。
编辑:我为所有实例变量创建了setter和getter,除了 enrolledStudents ArrayList。据我所知,你不能为ArrayList创建一个setter方法,对吧?有没有其他方法可以让XMLEncoder对其进行编码?
答案 0 :(得分:0)
好吧,事实证明你可以为ArrayLists创建setter,这只是我以前从未需要做的事情,并且愚蠢地假设它无法完成。 我在意识到我没有为ArrayList创建一个getter或setter之后尝试了这个:
public ArrayList<Student> getEnrolledStudents() {
return enrolledStudents;
}
public void setEnrolledStudents(ArrayList<Student> enrolledStudents) {
this.enrolledStudents = enrolledStudents;
}
这是我需要添加到Module类的所有内容,之后它运行良好。