目前我有一个程序可以保存和加载类型为"变量"的数组列表。从文件。但是,我希望能够从一个文件中保存和加载不同的对象(不同类的实例,例如"变量","函数"等等)。这是我现在的代码:
public SaveState(){
ObjectOutputStream out = null;
try {
out = new ObjectOutputStream(new FileOutputStream("vars.stt"));
} catch (IOException e) {
e.printStackTrace();
}
ArrayList<Variables> vars = new ArrayList<>();
vars.add(new Variables("g", 5));
vars.add(new Variables("f", -3.12));
try {
out.writeObject(vars);
out.flush();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
}
public LoadState(){
ObjectInputStream in = null;
try {
in = new ObjectInputStream(new FileInputStream("vars.stt"));
} catch (IOException e) {
e.printStackTrace();
}
try {
//final Object o = in.readObject();
final ArrayList<Variables> vars = (ArrayList<Variables>) in.readObject();
System.out.println(vars.toString());
} catch (IOException | ClassNotFoundException e) {
e.printStackTrace();
}
}
此代码仅允许我从文件加载一个对象类型。有没有办法以这种方式保存/加载多个对象类型?
答案 0 :(得分:2)
创建一个类层次结构:
//base class. No need to write any content
class ProgramElement {
}
//your variables class
class Variables extends ProgramElement {
//your code
}
//your functions class
class Functions extends ProgramElement {
//your code
}
//your lists class
class Lists extends ProgramElement {
//your code
}
然后使用ProgramElement类型的ArrayList。请记住列表,这不是您的列表类。它是java的List接口。
List<ProgramElement> elements = new ArrayList<>();
elements.add(aFunction); //add function object
elements.add(aList); //lists object
elements.add(aVariable); //variables object
注意:您可以使用Object类型的List实现相同的功能。但不建议这样做,因为这不是一个好习惯。
答案 1 :(得分:2)
您可以简单地使用包含变量或函数的arraylists的地图。地图在性能方面也很出色。
Map<String, List> map = new HashMap<String, List>();
map.put("variable", arralist1);
map.put("functions", arralist2);
map.put("list", arralist3);