在Java中将多个ArrayList保存/加载到一个文件中

在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

目前,我有一个程序,可以保存和加载文件中变量类型的ArrayList。但是,我希望能够从一个文件中保存和加载不同类(如变量、函数等)的不同ObjectsInstance。以下是我现在掌握的代码:

 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是不同类型的,它也能工作?是的。或者您可以使用泛型将其参数化。非常感谢您提供此解决方案。它工作得很好