java—序列化作为对象传递的可序列化对象

mutmk8jj  于 2021-07-06  发布在  Java
关注(0)|答案(1)|浏览(382)

所以我有一个名为person的类,它实现了serializable。
当我将person的一个示例传递给一个名为“savetofile(object obj)”的方法时,我会这样做

class FileManager() implements IGateway{
    public void saveToFile(Object ms) throws IOException {
        OutputStream file = new FileOutputStream(PATH);
        OutputStream buffer = new BufferedOutputStream(file);
        ObjectOutput output = new ObjectOutputStream(buffer);

        // serialize
        output.writeObject((Person)ms); //cast to serializable class
        output.close();
    }
}
public class Person implements Serializable{
    private HashMap<String, HashMap<String, ArrayList<Message>>> messageBoxes;
    private IGateway iGateway;

    public Person(){
        iGateway = new MessageManager();
        messageBoxes = new HashMap<String, HashMap<String, ArrayList<Message>>>();
    }

    public void saveMessage(){
        iGateway.saveToFile(this);
    }
}
public interface IGateway {
    void saveToFile(Object obj) throws IOException;
}

这给了我notserializableexception。出于设计原因,我需要不断地接收person示例作为对象。当我将它强制转换为可序列化类时,为什么它会一直给出notserializableexception?

eh57zj3b

eh57zj3b1#

花园里的田野 Person 类有自己的类型,不能 Serializable .
例如:
你的 HashMap 字段实现默认值 Serializable 接口,没问题。
名为 iGateway 有一种 IGateway 默认情况下不可序列化。
您必须使用第三方库进行序列化,它可以处理这样的事情,或者使它也可以序列化。
也可以覆盖 writeObject 对于 Person 使用自定义代码初始化,但请确保不要尝试序列化未实现此接口的其他对象。

相关问题