在Java中将多个ArrayList保存/加载到一个文件中
目前,我有一个程序,可以保存和加载文件中变量类型的ArrayList。但是,我希望能够从一个文件中保存和加载不同类(如变量、函数等)的不同ObjectsInstance。以下是我现在掌握的代码:在Java中将多个ArrayList保存/加载到一个文件中,java,serialization,arraylist,Java,Serialization,Arraylist,目前,我有一个程序,可以保存和加载文件中变量类型的ArrayList。但是,我希望能够从一个文件中保存和加载不同类(如变量、函数等)的不同ObjectsInstance。以下是我现在掌握的代码: public SaveState(){ ObjectOutputStream out = null; try { out = new ObjectOutputStream(new FileOutputStream("vars.stt")); } catch (I
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();
}
}
此代码仅允许我从文件中加载一种对象类型。有没有办法以这种方式保存/加载多个对象类型?创建如下类层次结构:
//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<ProgramElement> elements = new ArrayList<>();
elements.add(aFunction); //add function object
elements.add(aList); //lists object
elements.add(aVariable); //variables object
注意:您可以通过使用Object类型的列表来实现相同的功能。但不建议这样做,因为这不是一个好的做法。创建如下类层次结构:
//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<ProgramElement> elements = new ArrayList<>();
elements.add(aFunction); //add function object
elements.add(aList); //lists object
elements.add(aVariable); //variables object
注意:您可以通过使用Object类型的列表来实现相同的功能。但不推荐使用它,因为这不是一种好的做法。您可以简单地使用包含变量或函数的数组列表的映射。Map在性能方面也很好
Map<String, List> map = new HashMap<String, List>();
map.put("variable", arralist1);
map.put("functions", arralist2);
map.put("list", arralist3);
您可以简单地使用包含变量或函数的数组列表的映射。Map在性能方面也很好
Map<String, List> map = new HashMap<String, List>();
map.put("variable", arralist1);
map.put("functions", arralist2);
map.put("list", arralist3);
你没有试着为函数和变量创建一个基类,并使用类型为基类的数组列表吗?@ImeshaSudasingha老实说,我不确定我是否能够做到这一点,这需要我重构大量代码数百行。还有其他的解决方案吗?不,你只需要创建一些基本类,比如说ProgramElement,它们只是扩展变量和函数类。无需重构代码。@ImeshaSudasingha所以,如果我有类、变量、函数和列表,我将如何从一个类扩展所有3个类?为什么不使用对象类作为“基类”。你可以使用多态性。你没有试过为函数和变量创建一个基类,并使用类型基类的数组列表吗?@ImeshaSudasingha老实说,我不确定我是否能够做到这一点,这需要我重构大量代码数百行。还有其他的解决方案吗?不,你只需要创建一些基本类,比如说ProgramElement,它们只是扩展变量和函数类。无需重构代码。@ImeshaSudasingha所以,如果我有类、变量、函数和列表,我将如何从一个类扩展所有3个类?为什么不使用对象类作为“基类”。您可以使用多态性。非常感谢,起初我以为您是在告诉我按照类ProgramElement扩展变量、函数、列表{}的思路做一些事情,这就是我感到困惑的地方。再次感谢。非常感谢,起初我以为你是在告诉我按照类programmelement扩展变量、函数、列表{}的思路做一些事情,这就是我感到困惑的地方。再次感谢。所以即使ArrayList是不同类型的,这也可以工作?是的。或者您可以使用泛型将其参数化。非常感谢您提供此解决方案。它工作得很好,所以即使ArrayList是不同类型的,它也能工作?是的。或者您可以使用泛型将其参数化。非常感谢您提供此解决方案。它工作得很好