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