不可序列化的Java

时间:2016-01-13 19:55:34

标签: java file computer-science serializable

我无法弄清楚为什么我的班级不可序列化。正如您在我的代码中看到的,我的类实现了Serializable接口。

public class Firm {

PrintWriter out = new PrintWriter(System.out, true);
Scanner sc = new Scanner(System.in);

Set<Worker> workers = new HashSet<>();

boolean saveToFile(){
    String fileName = "text.txt";
    ObjectOutputStream file;
    boolean save = false;
    try{
        file = new ObjectOutputStream(new FileOutputStream(fileName));
        file.writeObject(workers);
        file.close();
        save = true;
    }catch(IOException e){
        e.printStackTrace();
    }
    return save;
}
}

import java.io.Serializable;

public abstract class Worker implements Serializable {//Code

任何想法如何解决?

2 个答案:

答案 0 :(得分:2)

问题是PrintWriterScanner不可序列化;你不能像这样序列化I / O连接。

将它们移动到您使用它们的任何地方(如果您需要它们)作为局部变量。不要把它们存放在课堂上。

答案 1 :(得分:0)

您应该放心,Worker类中的所有字段也都具有实现Serializable接口的类型。

根据您的评论中的类名和stacktrace片段,很可能您的Firm类中的类型为Worker的字段由于其结构而无法序列化。

所以,你必须至少做两件事:

1)Firm类还必须实现Serializable接口

2)将Scanner字段标记为transient