假设我有一个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
这是不允许的?生活不容易吗?这些额外的实例会干扰这个吗? 我做了一些快速的脏代码,制作了一个没有任何额外实例的新列表,并且它有效。
先谢谢!
答案 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();