如何序列化来自多个 类 的对象

How to Serialise objects from multiple classes

我正在编写一个程序,它使用序列化来存储程序的对象(用户、管理员、书籍等)。我有多个控制器来控制将不同的对象添加到不同的数组列表中。 例子: 登录控制器控制向系统添加和删除用户 例子: 控制向系统添加和删除书籍的书籍控制器

我想知道将来自不同控制器的所有这些不同对象保存到我的序列化文件中的最佳方法。

目前,我一直在读取每个控制器中的序列化文件来填充数组列表。这是我在“书籍”控制器中的阅读方法。 我也有一个保存到文件的方法,但是我不确定如何从不同的控制器实现 ArrayList。

private void populateArrayLists() {
    System.out.print("Im here in ArrayList");
    ArrayList<Object> deserialised = new ArrayList<Object>();

    try {
        FileInputStream file = new FileInputStream("info.ser");
        ObjectInputStream inputFile = new ObjectInputStream(file);
        deserialised = (ArrayList<Object>) inputFile.readObject();

        inputFile.close();
        file.close();
    } catch (IOException | ClassNotFoundException e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
    books = (ArrayList<Book>) deserialised.get(2);
}
private void saveData() {
    ArrayList<Object> allData = new ArrayList<Object>();

    books.add(book1);
    admins.add(admin1);
    users.add(user1);

    allData.add(users);
    allData.add(admins);
    allData.add(books);

    try {
        FileOutputStream file;
        file = new FileOutputStream("info.ser");
        ObjectOutputStream outputFile = new ObjectOutputStream(file);
        outputFile.writeObject(allData);
        outputFile.close();
        file.close();
        JOptionPane.showMessageDialog(null, "Saved");
    } catch (IOException e) {
        JOptionPane.showMessageDialog(null, e.getMessage());
    }
}

我想要一种将不同控制器中的所有不同对象保存在一个地方的方法。

鉴于您的问题描述,我建议您实施一种解决方案,您可以按照领域驱动设计中描述的方式使用存储库概念。它允许您集中处理目前拥有的对象集合的逻辑。由于您决定使用文件,我建议您为每个 class 个对象创建一个文件,而不是为所有对象集合创建一个文件。 Here 你可以找到一个基本的方法,它可以通过泛型进一步改进。