具有多个实例/扩展的ArrayList序列化

时间:2014-03-17 05:28:06

标签: java arraylist

假设我有一个ArrayList,它包含多个类的实例,这些类扩展自" People"(让我们称之为)类。

一个例子: 示例二字符串是名称和课程名称

ArrayList<People> people = new ArrayList<>();
people.add(new Teacher("Mrs. Doe","Math"));
people.add(new Student("Bob","Math"));
people.add(new Student("Sue","Math"));
people.add(new Student("Joe","Math"));

这些类结构的快速示例:

 abstract class People implements Serializable
    {
        String name;
        String course;
        ...
        private People(String newName, String newCourse)
        {
            this.name = newName;
            ...
        }
        @Override
        public String toString(){return...}
    }
    public class Teacher extends People
    {
        public class Teacher... yada-yada{
        super(variables)}
        @Override String toString(){return...}...
    }
    public class Student extends People
    {
        public class Teacher... yada-yada{
        super(variables)}
        @Override String toString(){return...}...
    }

是否可以将ArrayList输出到文件而不会出现任何错误(呵呵)?

错误:java.io.NotSerializableException: mvc.Model

这条线对我大吼:java.io.NotSerializableException: mvc.Model

这是不允许的?生活不容易吗?这些额外的实例会干扰这个吗? 我做了一些快速的脏代码,制作了一个没有任何额外实例的新列表,并且它有效。

先谢谢!

2 个答案:

答案 0 :(得分:0)

是否可以将ArrayList输出到文件而不会出现任何错误(呵呵)?

扩展Arraylist并像这样实施java.io.Serializable -

public class MyList extends ArrayList implements java.io.Serializable

要序列化对象,需要扩展java.io.Serializable。由于您需要序列化ArrayList,只需将其扩展即可。

PS - 保持简单的问题会给你更多的帮助。

答案 1 :(得分:0)

您是否尝试过不使用toString编写数组列表。您可以序列化该类,然后编写ArrayList,就像编写任何其他对象一样。

编写ArrayList:

    FileOutputStream fos = new FileOutputStream(filename);
    ObjectOutputStream oos = new ObjectOutputStream(fos);
    oos.writeObject(ARRAY_NAME);

请记住包含以下内容以解码序列化:

private static final long serialVersionUID = 123456;

读取ArrayList: 在尝试重新读取ArrayList时,您可以这样做:(只要它来自同一个序列化类)

    FileInputStream fis = new FileInputStream(filename);
    ObjectInputStream ois = new ObjectInputStream(fis);
    ARRAY_NAME = (ARRAY_TYPE_CAST)ois.readObject();